Java??3ì£o2¢·¢D-×÷-?à??
ê±??:2011-02-20 51cto2??í leizhimin
·¢éú?à??μ??-òòò?°?ê?á??????óμ????à?¥μè′y?ì3éμ??£
?ú??Java??3ì£o??3ìμ?í?2?ó????·ò????D£??òê??à??μ?????ó??òμ¥ày×ó£?μ?ê??ù??μ?ày×óê?2?íê??μ?£??aà???3?ò???íê??μ?ày×ó?£
/**
*??Java??3ì£o2¢·¢D-×÷-?à??
*
*??@author??Administrator
*/
public??class??Test??{
???????????????? public??static??void??main(String[]??args)??{
???????????????????????????????? DeadlockRisk??dead??=??new??DeadlockRisk();
???????????????????????????????? MyThread??t1??=??new??MyThread(dead,??1,??2);
???????????????????????????????? MyThread??t2??=??new??MyThread(dead,??3,??4);
???????????????????????????????? MyThread??t3??=??new??MyThread(dead,??5,??6);
???????????????????????????????? MyThread??t4??=??new??MyThread(dead,??7,??8);
???????????????????????????????? t1.start();
???????????????????????????????? t2.start();
???????????????????????????????? t3.start();
???????????????????????????????? t4.start();
???????????????? }
}
class??MyThread??extends??Thread??{
???????????????? private??DeadlockRisk??dead;
???????????????? private??int??a,??b;
???????????????? MyThread(DeadlockRisk??dead,??int??a,??int??b)??{
???????????????????????????????? this.dead??=??dead;
???????????????????????????????? this.a??=??a;
???????????????????????????????? this.b??=??b;
???????????????? }
???????????????? @Override
???????????????? public??void??run()??{
???????????????????????????????? dead.read();
???????????????????????????????? dead.write(a,??b);
???????????????? }
}
class??DeadlockRisk??{
???????????????? private??static??class??Resource??{
???????????????????????????????? public??int??value;
???????????????? }
???????????????? private??Resource??resourceA??=??new??Resource();
???????????????? private??Resource??resourceB??=??new??Resource();
???????????????? public??int??read()??{
???????????????????????????????? synchronized??(resourceA)??{
???????????????????????????????????????????????? System.out.println("read():"??+??Thread.currentThread().getName()??+??"??è?á?resourceAμ???£?");
???????????????????????????????????????????????? synchronized??(resourceB)??{
???????????????????????????????????????????????????????????????? System.out.println("read():"??+??Thread.currentThread().getName()??+??"??è?á?resourceBμ???£?");
???????????????????????????????????????????????????????????????? return??resourceB.value??+??resourceA.value;
???????????????????????????????????????????????? }
???????????????????????????????? }
???????????????? }
???????????????? public??void??write(int??a,??int??b)??{
???????????????????????????????? synchronized??(resourceB)??{
???????????????????????????????????????????????? System.out.println("write():"??+??Thread.currentThread().getName()??+??"??è?á?resourceAμ???£?");
???????????????????????????????????????????????? synchronized??(resourceA)??
|