当前位置:编程学习 > JAVA >>

java线程交互问题wait(),notifyAll()

public class ReadResult extends Thread {
private Calculator c;

public ReadResult(Calculator 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.getResult());
}
}

public static void main(String args[]){
Calculator cal = new Calculator();
/*
 * 开启读取计算结果线程
 */
new ReadResult(cal).start();
new ReadResult(cal).start();
new ReadResult(cal).start();
/*
 * 开启计算线程
 */
cal.start();
}
}

public class Calculator extends Thread{
private int result;

public int getResult(){
return result;
}

public void run(){
synchronized(this){
for(int i=1;i<101;i++){
result += i;
}
/*
 * 唤醒所有在此对象上等待的线程
 */
notifyAll();
}
}
}

求大神帮我看看这段代码有什么问题?看不出问题的请别回答,肯定是有问题的,谢谢合作 Java 多线程 线程交互 --------------------编程问答-------------------- 有Thread.notifyAll(),也有notifyAll(),后者针对的线程是主线程的,用错了会抛异常 --------------------编程问答-------------------- 这个程序不能确保
new ReadResult(cal).start();
new ReadResult(cal).start();
new ReadResult(cal).start();
这三个线程会在
cal.start();
这个线程之前执行。

如果cal.start()先做完了,那三个就死了。 --------------------编程问答-------------------- 3个领导(ReadResult)和一个屁民(cal)准备在会议室开个会议,1个领导还未到场屁民脑残就开始报告,居然讲完了就散会(notifyAll),你丫都从后门走了, 领导脑子很猪,还在会议室等你报告呢。 --------------------编程问答-------------------- 死锁了吧,cal.start();线程执行不了。 --------------------编程问答-------------------- 好久没看帖子了、、、、
其实我想问的是该怎么解决,在学习的时候那个人的博客上说了有常用的解决方式,但是又没说怎么解决,希望有人帮我修改一下代码
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,