光阴似箭催人老,日月如移越少年。
Setiap utas dimulakan dengan c=new C() dan mengunci objek yang berbeza.
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()也没效果; } }
Objek tunggu C bagi kedua-dua utas ini tidak sama, dan mereka tidak dapat merasakan kunci pihak yang satu lagi
Setiap utas dimulakan dengan c=new C() dan mengunci objek yang berbeza.
Objek tunggu C bagi kedua-dua utas ini tidak sama, dan mereka tidak dapat merasakan kunci pihak yang satu lagi