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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fmi110 高级黑马   /  2015-9-25 17:01  /  463 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

a
  1. import java.util.concurrent.locks.Lock;
  2.         import java.util.concurrent.locks.ReentrantLock;

  3.         //死锁演示,出现嵌套锁时会出现互相等待对方释放锁资源现象
  4.         public class DeadLockDemo {
  5.         public static void main(String[] args) {
  6.                 final DeadLock dl = new DeadLock();
  7.                 new Thread() {
  8.                         public void run() {
  9.                                 while (true)
  10.                                         dl.show();
  11.                         };
  12.                 }.start();
  13.                 new Thread() {
  14.                         public void run() {
  15.                                 while (true)
  16.                                         dl.print();
  17.                         };
  18.                 }.start();
  19.         }
  20.         }

  21.         class DeadLock {
  22.                 private Lock lock1 = new ReentrantLock();
  23.                 private Lock lock2 = new ReentrantLock();

  24.                 public void show() {
  25.                         lock1.lock();
  26.                         System.out.println(Thread.currentThread().getName()+"..show...lock1.lock();");
  27.                         lock2.lock();
  28.                         System.out.println(Thread.currentThread().getName()+"..show...lock2.lock();");
  29.                         lock2.unlock();
  30.                         lock1.unlock();
  31.                 }

  32.                 public void print() {
  33.                         lock2.lock();
  34.                         System.out.println(Thread.currentThread().getName()+"..print...lock2.lock();");
  35.                         lock1.lock();
  36.                         System.out.println(Thread.currentThread().getName()+"..ptint...lock1.lock();");
  37.                         lock1.unlock();
  38.                         lock2.unlock();
  39.                 }
  40.         }

  41.         运行:
  42.         Thread-0..show...lock1.lock();
  43.         Thread-0..show...lock2.lock();
  44.         Thread-0..show...lock1.lock();
  45.         Thread-1..print...lock2.lock();
复制代码


3 个回复

倒序浏览
也就是如果那个被锁定的资源没有空间,代码就走不动,吗?
回复 使用道具 举报
shike951128 发表于 2015-9-25 18:35
也就是如果那个被锁定的资源没有空间,代码就走不动,吗?

是的  比方说 线程1 现有锁B钥匙,但是现在需要打开锁A
而线程2 现在有锁A 的钥匙,但是需要打开锁B,才能往下走
结果两个线程都在等对方释放钥匙,结果导致都没办法往下走
回复 使用道具 举报
fmi110 发表于 2015-9-25 20:32
是的  比方说 线程1 现有锁B钥匙,但是现在需要打开锁A
而线程2 现在有锁A 的钥匙,但是需要打开锁B,才 ...

这已经不是单纯的处理对象了,这有点算法的味道。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马