打字猴:1.700451381e+09
1700451381
1700451382 }
1700451383
1700451384 public synchronized void b2(){
1700451385
1700451386 System.out.println(“进入B.b2()”);
1700451387
1700451388 }
1700451389
1700451390 }
1700451391
1700451392 public static void main(String args[]){
1700451393
1700451394 final A a=new A();
1700451395
1700451396 final B b=new B();
1700451397
1700451398 //线程A
1700451399
1700451400 new Thread(new Runnable(){
1700451401
1700451402 public void run(){
1700451403
1700451404 a.a1(b);
1700451405
1700451406 }
1700451407
1700451408 },“线程A”).start();
1700451409
1700451410 //线程B
1700451411
1700451412 new Thread(new Runnable(){
1700451413
1700451414 public void run(){
1700451415
1700451416 b.b1(a);
1700451417
1700451418 }
1700451419
1700451420 },“线程B”).start();
1700451421
1700451422 }
1700451423
1700451424 此段程序定义了两个资源A和B,然后在两个线程A、B中使用了该资源,由于两个资源之间有交互操作,并且都是同步方法,因此在线程A休眠1秒钟后,它会试图访问资源B的b2方法,但是线程B持有该类的锁,并同时在等待A线程释放其锁资源,所以此时就出现了两个线程在互相等待释放资源的情况,也就是死锁了,运行结果如下:
1700451425
1700451426 线程A进入A.a1()
1700451427
1700451428 线程B进入B.b1()
1700451429
1700451430 线程B试图访问A.a2()
[ 上一页 ]  [ :1.700451381e+09 ]  [ 下一页 ]