fig6588 2015-09-05 14:36 采纳率: 0%
浏览 3611

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

程序是这样的

/*   第一个类*/
 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条回答

  • devmiao 2015-09-05 15:42
    关注
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!