A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© as604049322 金牌黑马   /  2014-11-28 00:10  /  870 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不知道能否显示“添加代码文字”

死锁.png (201.79 KB, 下载次数: 5)

死锁.png

1 个回复

倒序浏览


  1. class Test implements Runnable
  2. {
  3.         boolean flag=true;
  4.         private int i=1;
  5.         Test(boolean f){
  6.                 this.flag=f;
  7.         }
  8.         public void run(){
  9.                 if(this.flag){
  10.                 while(i>0){
  11.                         System.out.println(" "+i+++" "+Thread.currentThread().getName()+":我准备进入锁A");
  12.                         synchronized(MyLock.locka){
  13.                                 System.out.println(" "+i+++" "+Thread.currentThread().getName()+":我关闭了锁A,下面准备进入锁B");
  14.                                
  15.                                 synchronized(MyLock.lockb){
  16.                                         System.out.println(" "+i+++" "+Thread.currentThread().getName()+":在进入锁A后,我又进入了锁B,现在锁A和锁B都被我关了哦");
  17.                                         System.out.println(" "+i+++" "+Thread.currentThread().getName()+":运行完成,现在打开锁B");
  18.                                 }
  19.                                 System.out.println(" "+i+++" "+Thread.currentThread().getName()+":运行完成,现在打开锁A");
  20.                         }
  21.                        
  22.                 }
  23.                 }else{
  24.                 while(i>0){
  25.                         System.out.println(" "+i+++" "+Thread.currentThread().getName()+":我准备进入锁B");
  26.                         synchronized(MyLock.lockb){
  27.                                 System.out.println(" "+i+++" "+Thread.currentThread().getName()+":我关闭了锁B,下面准备进入锁A");
  28.                                
  29.                                 synchronized(MyLock.locka){
  30.                                         System.out.println(" "+i+++" "+Thread.currentThread().getName()+":在进入锁B后,我又进入了锁A,现在锁B和锁A都被我关了哦");
  31.                                         System.out.println(" "+i+++" "+Thread.currentThread().getName()+":运行完成,现在打开锁A");
  32.                                 }
  33.                                 System.out.println(" "+i+++" "+Thread.currentThread().getName()+":运行完成,现在打开锁B");
  34.                         }
  35.                 }
  36.                 }
  37.         }
  38. }


  39. class MyLock
  40. {
  41.         static Object locka = new Object();
  42.         static Object lockb = new Object();
  43. }

  44. class  DeadLockTest
  45. {
  46.         public static void main(String[] args)
  47.         {
  48.                 Test t = new Test(true);
  49.                 Thread t1 = new Thread(t);
  50.                 Thread t2 = new Thread(t);
  51.                 t1.start();
  52.                 try{Thread.sleep(10);}catch(Exception e){}
  53.                 t.flag = false;
  54.                 t2.start();
  55.         }
  56. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
sk0806 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马