java thread notify恢复挂起线程的问题
java 的开很多线程中 使用wait把每个线程都挂住 但使用notify能确保每个线程都正常resume吗
实际我试验的结果 貌似是不能完全恢复啊
举个简单的例子
public class TestThread extends Thread{
public void run(){ //假设run部分分三步,每一部分都是复杂的操作,而且每次每次做完后 都需要挂住 等待
callStep1()
WaitSyn()
callStep2()
WaitSyn()
callStep3()
}
public synchronized void WaitSyn(){
try {
wait(); //这样把每个线程都挂住
}catch(InterruptedException e)
{
e.printStackTrace();
}
}
public void Resume(){
synchronized(this){
notify(); //书上说 notify会随机的恢复一个挂起的线程
}
}
}
public static void main(String args[]){
int NUM=30; //假设线程开很多 这里就开30个
TestThread []loaders=new TestThread[NUM];
for(int i=0;i<NUM;i++)
{
loaders[i]=new TestThread(i+"");
loaders[i].start(); //直接运行 运行完step1后会挂住
}
try{
Thread.currentThread().sleep(10000); //这部分就是等待一段时间 再全部恢复线程 再10秒内 step1已完成
}catch(Exception e){
e.printStackTrace();
}
for(int i=0;i<NUM;i++)
{
loaders[i].Resume(); //将挂住的30个线程都恢复???? 但问题是貌似30个线程不能完全恢复啊 只能恢复十几个 或二十几个 每次都不会完整的恢复30个线程继续执行step2
}
}
这个问题很奇怪 notify是随机恢复的 难道我掉30次notify 还不能全部恢复吗??
谢谢各位