如何暂停执行某个线程。我有线程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. 如何暂停PerformSelector执行?
- 4. 如何暂停执行C#.NET程序?
- 5. 如何按暂停按钮时暂停程序执行
- 6. 暂停执行
- 7. 如何停止或暂停php执行?
- 8. 线程暂停
- 9. Java暂停执行
- 10. 暂停和取消暂停线程
- 11. 暂停执行远程进程(C,Windows)
- 12. 如何在Pycharm中暂停程序执行(暂停按钮不工作)?
- 13. 如何暂停javascript的执行?
- 14. 如何在JavaScript中暂停执行?
- 15. 如何暂停代码执行?
- 16. PyCharm - 如何暂停所有线程
- 17. 如何取消暂停线程的Qt
- 18. 如何暂停和恢复线程
- 19. 如何暂停一个线程?
- 20. 如何暂停主u.i线程(Android)
- 21. 如何在java中暂停线程?
- 22. Swift iOS如何暂停线程
- 23. 如何暂停和恢复线程?
- 24. 如何暂停和恢复surfaceView线程
- 25. 如何暂停一个线程(python)
- 26. 立即暂停应用程序执行
- 27. Node.js - 在另一个线程中暂停脚本执行
- 28. Python暂停线程,手动执行并重置时间
- 29. 优雅地(即最终合作)暂停线程执行
- 30. 主线程暂停运行时异常
这可能会帮助 - http://stackoverflow.com/questions/5472868/如何暂停程序,直到按下按钮/ 5472999#5472999 – mre 2011-05-19 12:23:15