光阴似箭催人老,日月如移越少年。
每个线程初始化的时候都是 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不是同一个,是感知不到对方的锁的
每个线程初始化的时候都是 c=new C(),锁住的是不同的对象。
这两个线程wait的对象C不是同一个,是感知不到对方的锁的