| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Потоки |
| Автор: Mr.Doctor 12.8.2003, 18:37 |
| В старой Java у класса Thread был такой замечательный метод как suspend() / resume(). Из соображений безопасности метод упразнили. Теперь стоит задача: разработать механизм, который приостановит поток в том месте где это возможно (безопасно или назовите как хотите) но с подачи другого (основного) потока. Тоесть, я хочу приостановить поток там где хочу, а не там где у него написано while(suspended == true) { wait() } |
| Автор: DarkDS 13.8.2003, 13:42 |
| Что именно хочешь добиться? |
| Автор: Mr.Doctor 13.8.2003, 13:56 |
| Хочу, чтобы выполнение потока (Thread) можно было приостановить (suspend) из другого потока. Плюс к этому, поток который надо приостановить должен приостанавливаться не где нипопадя, а заканчивая какую-либо внутреннюю микрооперацию (например итерацию цикла). |
| Автор: DarkDS 13.8.2003, 14:02 |
| Эта... А много в потоке вообще таких операций? то есть много ли мест, в которых можно его приостановить? |
| Автор: Mr.Doctor 13.8.2003, 14:14 |
| Ну, скажем от 2 до 3. Я, впринцыпе, решил проблему таким путём: public class SomeClass extends Thread { } |
| Автор: Mr.Doctor 13.8.2003, 14:23 |
| Sorry, Ну, скажем от 2 до 3. Я, впринцыпе, решил проблему таким путём: public class SomeClass extends Thread { boolean suspended; public void suspendMe() { suspended = true; } public synchronized void wakeUpMe() { suspended = false; notify(); } public void myWait() { try { synchronized(this) { while(suspended) { wait(); } } catch (....) { } } } public void run() { .................................... myWait(); ................................. for (...........) { myWait(); ................................ } ...........and so on .................. } } Просто это какое-то горбатое решение. Если есть другие варианты напишите |
| Автор: DarkDS 14.8.2003, 15:11 |
| По сути только так... Если хочешь чтобы какие то части процесса нельзя было остановить... При суспенд - он тоже останавливал в любой точке.... |