java 为什么notify和notifyAll都不起作用?
大家讲道理
大家讲道理 2017-04-18 09:58:35
0
2
825
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(2)
伊谢尔伦

每個執行緒初始化的時候都是 c=new C(),鎖住的是不同的物件。

class Example{
    public static void main(String arr[]){
        C c = new C();
        ThreadB th1=new ThreadB("th1",c);
        ThreadB th2=new ThreadB("th2",c);
    }
}
class ThreadB implements Runnable{
    C c;
    Thread thread;
    ThreadB(String name,C c){
        //c=new C();
        this.c=c;
        thread=new Thread(this,name);
        thread.start();
    }
    public void run(){
        if(thread.getName().equals("th1")){
            for(int i=0;i<3;i++)c.t1(false);
            c.t1(true);
        }
        if(thread.getName().equals("th2")){
            for(int i=0;i<3;i++)c.t2(false);
            c.t2(true);
        }
        System.out.println("end");
    }
}
class C{
    synchronized void t1(boolean boo){
        if(boo){
            notify();
            return;
        }
        System.out.println("t1");
        notify();
        try{
            wait();
        }catch(InterruptedException exc){System.out.println(exc);}
    }
    synchronized void t2(boolean boo){
        if(boo){
            System.out.println();notify();return;
        }
        System.out.println("t2");
        notify();//notifyAll()也没效果;
    }
}
小葫芦

這兩個線程wait的物件C不是同一個,是感知不到對方的鎖的

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!