光阴似箭催人老,日月如移越少年。
Chaque thread est initialisé avec c=new C() et verrouille différents objets.
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()也没效果; } }
L'objet d'attente C de ces deux threads n'est pas le même, et ils ne peuvent pas détecter le verrou de l'autre partie
Chaque thread est initialisé avec c=new C() et verrouille différents objets.
L'objet d'attente C de ces deux threads n'est pas le même, et ils ne peuvent pas détecter le verrou de l'autre partie