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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fmi110 高级黑马   /  2015-9-11 09:20  /  172 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

a
  1. /**
  2. *        死锁演示
  3. */

  4. public class DeadLock implements Runnable {
  5.         private Object objA = new Object();
  6.         private Object objB = new Object();//锁对象
  7.         private boolean flag = false;
  8.        
  9. //        DeadLock(boolean b){
  10. //                this.flag = b;
  11. //        }
  12.         @Override
  13.         public void run() {
  14.                 // 相互嵌套是锁,可能会出现互相等待的现象导致死锁
  15.                 while(true){
  16.                         if(flag){
  17.                                 synchronized(objA){//嵌套锁
  18.                                         System.out.println("if A..."+Thread.currentThread().getName());
  19.                                         synchronized(objB){
  20.                                                 System.out.println("if B..."+Thread.currentThread().getName());
  21.                                         }
  22.                                         flag = flag^true; //flag取反
  23.                                 }
  24.                         }else{
  25.                                 synchronized(objB){//嵌套锁
  26.                                         System.out.println("else A..."+Thread.currentThread().getName());
  27.                                         synchronized(objA){
  28.                                                 System.out.println("else B..."+Thread.currentThread().getName());
  29.                                                                                                                                                                        
  30.                                         }
  31.                                         flag = flag^true;  //flag取反
  32.                                 }
  33.                         }
  34.                 }
  35.                
  36.         }
  37. }
复制代码

  1. public class DeadLockTest {

  2.         /**
  3.          * 用于死锁的测试
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 //建立资源对象
  8.                 DeadLock d1 = new DeadLock();
  9.                 //新建两个进程
  10.                 new Thread(d1,"线程1").start();
  11.                 new Thread(d1,"线程2").start();
  12.         }

  13. }
复制代码



1 个回复

倒序浏览
运行结果
  1. else A...线程1         //线程1 进入else,获取锁B
  2. else B...线程1     
  3. if A...线程1     //线程1执行完else,释放B锁,进入if,获取锁A,在等待获取B锁
  4. else A...线程2        //线程2 持有B锁,在等待A锁
  5. //此时出现互相等待,即死锁现象,程序无法继续运行
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马