搜尋

首頁  >  問答  >  主體

java 为什么notify和notifyAll都不起作用?

大家讲道理大家讲道理2781 天前844

全部回覆(2)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:00:35

    每個執行緒初始化的時候都是 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()也没效果;
        }
    }

    回覆
    0
  • 高洛峰

    高洛峰2017-04-18 10:00:35

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

    回覆
    0
  • 取消回覆