黑马程序员技术交流社区

标题: 线程同步 死锁演示 [打印本页]

作者: fmi110    时间: 2015-9-25 17:01
标题: 线程同步 死锁演示
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();
复制代码



作者: shike951128    时间: 2015-9-25 18:35
也就是如果那个被锁定的资源没有空间,代码就走不动,吗?
作者: fmi110    时间: 2015-9-25 20:32
shike951128 发表于 2015-9-25 18:35
也就是如果那个被锁定的资源没有空间,代码就走不动,吗?

是的  比方说 线程1 现有锁B钥匙,但是现在需要打开锁A
而线程2 现在有锁A 的钥匙,但是需要打开锁B,才能往下走
结果两个线程都在等对方释放钥匙,结果导致都没办法往下走
作者: shike951128    时间: 2015-9-25 22:20
fmi110 发表于 2015-9-25 20:32
是的  比方说 线程1 现有锁B钥匙,但是现在需要打开锁A
而线程2 现在有锁A 的钥匙,但是需要打开锁B,才 ...

这已经不是单纯的处理对象了,这有点算法的味道。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2