多个线程依次调用wait暂停,然后再依次调用notify重启,为什么最后一个线程总是无法重启?
我在主程序中创建多个线程执行同一任务,当某一条件满足时时,主程序会依次使所有线程执行wait方法暂停,当另一条件满足时,再依次使所有线程执行notify方法重启。当线程数大于1的时候,总会有一个线程是无法重启的,不知道是什么原因,急坏了。
public class MyThread extends Thread {
private Object control = new Object();
@Override
public void run() {
do {
synchronized(control) {
if(this.suspendFlag == true) {
try {
control.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//do something...
} while(...);
}
public void setSuspend(boolean suspendFlag) {
if(suspendFlag == false) {
synchronized(control) {
control.notify();
}
}
this.suspendFlag = suspendFlag;
}
}
public class MyThread extends Thread {
private Object control = new Object();
@Override
public void run() {
do {
synchronized(control) {
if(this.suspendFlag == true) {
try {
control.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//do something...
} while(...);
}
public void setSuspend(boolean suspendFlag) {
if(suspendFlag == false) {
synchronized(control) {
control.notify();
}
}
this.suspendFlag = suspendFlag;
}
}
...全文
相关推荐
Qt之线程的开始暂停恢复停止 源码
Qt之线程的开始暂停恢复停止 源码 win10 mingw32 编译通过
java 可重启线程及线程池类的设计(详解)
下面小编就为大家带来一篇java 可重启线程及线程池类的设计(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Android 代码实现重启
NULL 博文链接:https://fly1219.iteye.com/blog/1661698
转载:[VCS] ADMIN_WAIT state
NULL 博文链接:https://changda-junge.iteye.com/blog/932611
零停重启程序工具Huptime研究
零停重启目标程序,比如一个网络服务程序,不用丢失和中断任何消息实现重新启动,正在处理的消息也不会中断和丢失,重启的方法是给目标程序的进程发SIGHUP信号。


Java SE
