黑马程序员技术交流社区

标题: 做多线程题目时遇见的问题 [打印本页]

作者: 18664300701    时间: 2015-9-5 23:46
标题: 做多线程题目时遇见的问题
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
理论上不是只能唤醒一个吗?







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2