fig6588
fig6588
2015-09-05 14:36

java notify()不是只能唤醒单个线程么,为什么我程序的notify()能唤醒3个

  • java
  • 线程

程序是这样的

/*   第一个类*/
 public class ThreadB extends Thread{
    int total;
    public void run(){
        synchronized(this){
            for(int i=0;i<101;i++){
                total+=i;
            }
            try {
                sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            notify();
        }
    }
    public int getTotal(){
        return this.total;
    }

}



/*   第二个类*/
public class ReaderResult extends Thread{
    ThreadB c;
    public ReaderResult(ThreadB c){
        this.c=c;
    }
    public void run(){
        synchronized (c) {
            try{
                System.out.println(Thread.currentThread()+"等待计算结果。。。。");
                c.wait();
            }catch(InterruptedException e){
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread()+"计算结果为:"+c.getTotal());
        }
    }
    public static void main(String[] args) {
        ThreadB calculator = new ThreadB();

        ReaderResult reader1=new ReaderResult(calculator);      
        ReaderResult reader2=new ReaderResult(calculator);
        ReaderResult reader3=new ReaderResult(calculator);
        reader1.start();
        reader2.start();
        reader3.start();
        calculator.start();


    }
}

输出结果大多数都
Thread[Thread-1,5,main]等待计算结果。。。。
Thread[Thread-3,5,main]等待计算结果。。。。
Thread[Thread-2,5,main]等待计算结果。。。。
Thread[Thread-1,5,main]计算结果为:5050
Thread[Thread-2,5,main]计算结果为:5050
Thread[Thread-3,5,main]计算结果为:5050

理论上不是只能唤醒一个吗?

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

3条回答