我想要一個啓動線程的類並提供方法來暫停和繼續此線程。我的第一個方法是擁有標誌,只要值爲真,它就會循環睡眠方法。像這樣:如何用wait()和notify()正確地暫停線程
public class Bot {
private Thread t ;
private boolean isPaused;
public Bot(){
t = new Thread(new Runnable(){
@Override
public void run() {
while (true) {
System.out.println("Hi");
while(isPaused){
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
});
t.start();
}
public void pauseBot(){
isPaused = true;
}
public void continueBot(){
isPaused = false;
}
}
但由於線程仍在運行和浪費CPU,我不覺得這是一個很好的解決方案。這與wait()和notify()看起來如何? 我看過關於該主題的各種教程,但不知怎的,我不能將它們應用於我的問題。
每當我嘗試它,我要麼IllegalMonitorStateException或代碼停止我的整個應用程序,而不僅僅是我想要停止的線程。
我的另一個問題是:如何防止線程在關鍵時刻暫停,例如,
Runnable r = new Runnable(){
@Override
public void run() {
while(true){
task1();
task2();
//Thread mustn't be stopped from here....
task3();
task4();
task5();
task6();
task7();
//... to here
task8();
task9();
task10();
}
}
};
因爲當TASK3().... task7()處理的東西,而線程暫停時必須有辦法讓螺紋瓶口task7(),直到它暫停將到期。
我希望你能幫我解決我的問題。 由於提前, 弗洛
的可能重複[?如何停止和Java中安全地恢復線程(http://stackoverflow.com/questions/11856287/how-to-stop-and-resume-thread-safely-in-java) – Anshul 2014-11-05 18:47:37