首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

java 线程的wait和notify有关问题

2012-02-09 
java 线程的wait和notify问题Java codepackage WaitAndNotifypublic class Test {public static void mai

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关键字起到了作用,这是锁机制,保护线程安全的。

热点排行