如何暫停執行某個線程。我有線程t,並且有兩個按鈕,PAUSE和CONTINUE。在暫停時,我需要暫停執行線程,並繼續從之前停止的線程開始執行線程。什麼放在聽衆?如何暫停執行線程
如何暫停執行線程
回答
Java中的線程是合作的,這意味着你不能強制線程停止或暫停,而是向線程發出你想要的信號和線程(=你的邏輯)自己做的事情。
使用synchronized,wait()和notify()。
- 在要停止的線程中創建一個原子標誌(例如布爾型字段)。可停止的線程監視循環中的這個標誌。循環必須在區塊內。
- 當您需要停止線程(按鈕單擊)時,您設置此標誌。
- 線程看到標誌已設置並在公共對象(可能本身)上調用
wait()
。 - 當您想重新啓動線程時,重置標誌並致電
commonObject.notify()
。
有道理的第一個答案+1 – 2011-05-19 12:25:59
+1,這是非常正確的解決方案。 – mre 2011-05-19 12:33:14
如果您正在使用原子布爾值來指示線程應該繼續執行還是暫停執行,爲什麼循環需要位於同步塊中? – 2011-05-19 12:58:57
我想你可能想看看的wait()和notify()反對java.lang.Object繼承
方法有一個等待,等待,你可以調用。等待聽起來更接近你正在尋找的東西。爲什麼你需要暫停執行某個線程?如果除了家庭作業以外,可能還有其他解決方案。
暫停某些線程的執行是一個非常好的,有效的解決方案。我在練習中一直都在使用這個... – mre 2011-05-19 12:27:26
對不起,我並不是想暗示這樣做不好。雖然你必須考慮虛假的喚醒,錯過的信號等。我的意思是,根據爲什麼需要這樣做的原因,可能有更好的解決方案來解決問題。 – 2011-05-19 12:53:08
與線程池相同的邏輯。當線程池中,直到它們被調用來執行提交池
問題是關於停止現有線程,而不是關於啓動新線程。線程池與它無關。 – 2011-05-19 12:40:41
當等待被按下等待某個對象時,並且當進行的操作按下時調用notifyAll在同一個對象上。 – Amareswar 2011-05-19 12:49:20
你可以試試這個一些行動:
private boolean isPaused = false;
public synchronized void pause(){
isPaused = true;
}
public synchronized void play(){
isPaused = false;
notyfyAll();
}
public synchronized void look(){
while(isPaused)
wait();
}
public void run(){
while(true){
look();
//your code
}
- 1. Python暫停線程執行
- 2. 線程暫停執行Tkinter程序
- 3. 如何暫停執行C#.NET程序?
- 4. 如何暫停與執行
- 5. 如何暫停PerformSelector執行?
- 6. 如何按暫停按鈕時暫停程序執行
- 7. 暫停/執行多線程程序中的一個線程(C#)
- 8. Java暫停程序執行
- 9. 暫停執行
- 10. 如何在主線程停止/暫停線程/ Activity在android中暫停/停止?
- 11. 暫停線程,而另一個線程正在執行任務
- 12. 如何停止或暫停php執行?
- 13. 線程暫停
- 14. Java暫停執行
- 15. pthread - 暫停/暫停所有線程
- 16. 暫停和取消暫停線程
- 17. 主線程暫停
- 18. Ruby暫停線程
- 19. 暫停執行遠程進程(C,Windows)
- 20. 暫停和停止線程
- 21. 如何在Pycharm中暫停程序執行(暫停按鈕不工作)?
- 22. 如何暫停代碼執行?
- 23. 如何用guard和pry暫停執行?
- 24. 如何在JavaScript中暫停執行?
- 25. 如何暫停執行任務
- 26. 如何暫停Thread的執行?
- 27. 如何暫停執行動作
- 28. 如何暫停javascript的執行?
- 29. 如何在javascript中暫停UI線程
- 30. Swift iOS如何暫停線程
這可能會幫助 - http://stackoverflow.com/questions/5472868/如何暫停程序,直到按下按鈕/ 5472999#5472999 – mre 2011-05-19 12:23:15