Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
По сути только так... Если хочешь чтобы какие то части процесса нельзя было остановить...
При суспенд - он тоже останавливал в любой точке....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)