fig6588
2015-09-05 14:36java 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条回答
为你推荐
- 要求线程A输出一个奇数数,接着线程B输出一个偶数,如此交叉输出100以内的所有奇偶数。为什么输出的开始的时候会有2个0,要怎么改?
- java
- 1个回答
- 关于java中的多线程问题?
- java
- 1个回答
- 线程同步锁中为什么锁对象和wait()或notify()的对象要一致?
- java
- 3个回答
- 为什么在Java中object.wait()/notify()方法必须在持有锁的情况下才能执行?
- 同步
- 多线程
- 0个回答
- 新手 Java 多线程
- java
- 多线程
- 3个回答
换一换