当前位置: 代码迷 >> J2EE >> java 线程的wait和notify有关问题
  详细解决方案

java 线程的wait和notify有关问题

热度:226   发布时间:2016-04-22 02:40:31.0
java 线程的wait和notify问题
Java code
package WaitAndNotify;public class Test {    public static void main(String []args) throws InterruptedException{        waiter w=new waiter();        notifyer n=new notifyer(w);        w.start();        n.start();    }}class waiter extends Thread{    public synchronized  void run(){            try {            sleep(1000);            System.out.println("Going wait");            wait();            System.out.println("wake up");        } catch (InterruptedException e) {            System.out.println("Interrupt");        }    }}class notifyer extends Thread{    waiter t;    public notifyer(waiter t){        this.t=t;    }    public void run(){        System.out.println("Going  notify");        synchronized (t) {            t.notify();        }        System.out.println("Notify Over");    }}


java编程思想上说 wait应该在notify之前调用否则会产生信号丢失,但是这里运行的时候貌似是notify在等待wait的到来,何解?

------解决方案--------------------
你这个就是wait在notify之前调用呀。
当w.start()时,waiter类的run方法开始执行,由于需要sleep(1000)。
在waiter类sleep的过程中,notifyer类的run方法开始执行,下面是重点:
就是当notifyer执行到
synchronized (t) {
t.notify();
}
时,发现waiter类正在执行,还没有结束,于是就等待waiter类run方法执行结束后,才继续执行了t.notify();

这里主要是synchronized关键字起到了作用,这是锁机制,保护线程安全的。
  相关解决方案