黑马程序员技术交流社区

标题: JAVA 多线程的问题 [打印本页]

作者: 张庚    时间: 2013-2-7 15:32
标题: JAVA 多线程的问题
public class ReaderResult extends Thread {   
    Calculator c;   
  
    public ReaderResult(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.total);   
            }   
    }   
  
    public static void main(String[] args) {   
            Calculator calculator = new Calculator();   
            //启动三个线程,分别获取计算结果   
            new ReaderResult(calculator).start();   
            new ReaderResult(calculator).start();   
            new ReaderResult(calculator).start();   
            //启动计算线程   
            calculator.start();   
               
    }   
}  


public class Calculator extends Thread {   
    int total;   
    public void run() {   
            synchronized (this) {   
                System.out.println(total);   
                    for (int i = 0; i < 101; i++) {   
                            total += i;   
                    }   
                    System.out.println(total);      
            }   
    }   
}  

就2个简单的类 , 以我的认识,应该在c.wait()这里卡住,也就是说应该不会输出“计算结果为:" ”这些话。  但是为什么他有时候会输出呢?(有时候不会)。 到底是什么破坏了wait 状态?  应该不是start, 因为有时候是先输出System.out.println(total)这里, 然后再打印等待计算结果。。  高人请指点下


作者: 李桐    时间: 2013-2-8 23:42
本帖最后由 李桐 于 2013-2-8 23:49 编辑

new ReaderResult(calculator).start();   
new ReaderResult(calculator).start();   
new ReaderResult(calculator).start();   
//前三个线程启动,但是上了锁,只有一个可以到达wait,cpu有一定概率先执行到wait语句
calculator.start();   
//最后一个线程启动,cpu也有一定概率执行输出语句在wait方法调用之前




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