我在看O'reilly的<<Java线程>>时,看到了如下一段代码,各位高手能否帮助小弟分析一下,谢谢!代码如下:public class Barrier{
private int thread2wait4;
private InterruptedException iex;

public Barrier(int nThreads){
threads2wait4 = nThreads;
}

public synchronized int waitForRest()
throws InterruptedException{
int threadNum = --threads2wait4;

if(iex!=null) throws iex;
if(threads2wait4 <= 0){
notifyAll();
return threadNum;
}
while(threads2wait4 > 0){
if(iex != null) throw iex;
try{
wait();
} catch (InterruptedException ex){
iex = ex;
notifyAll();
}
}
return threadNum;
}

public synchronized void freeAll(){
iex = new InterruptedException("Barrier Released by freeAll");
notifyAll();
}
}疑问如下:
1,书中说"每一个到达屏障的线程都调用wait()方法,而当最后一个线程到达时,就要通知所有等待的线程"对于这一点我能够理解,它又说"如果其中任何一个等待线程收到中断信号,则所有的线程都应该收到同样的中断信号",这句话该怎么理解?2,当调用了wait()方法的线程,收到了notify()通知,并获取了锁以后,要重新执行run方法吗?还是从被中断出继续执行?请各位高手给我这个初学者解答,谢谢!

解决方案 »

  1.   


    2.从wait的那行开始继续执行
      

  2.   

    推荐你再参考一下《java网络编程》,也是orelly的,我从那本书上面收益非钱
      

  3.   

    当调用了wait()方法的线程,收到了notify()通知,并获取了锁以后,继续执行wait()下面的语句
      

  4.   

    个人理解
    1、作者的意思是说,当共同享一个资源的时候,当其中一个线程收到中断信号,即线程阻塞,那么其它调用该资源的线程也需要wait。否则会形成线程访问顺序错误。
    2、调用wait后,现成处与等待状态,好比遇到了红灯,notify()后相当与红灯变绿灯,线程在资源就绪后会自动启动,如果资源被其他线程强占则会形成不稳定状态,抛出错误。
      

  5.   

    请问楼主<<Java线程>>这本书怎么样?