黑马程序员技术交流社区

标题: 死锁问题知识整理 [打印本页]

作者: Bermuda     时间: 2014-8-5 20:51
标题: 死锁问题知识整理
本帖最后由 格子、 于 2014-8-6 15:39 编辑

死锁含义:当t>=2时,因抢夺资源造成的相互等待,若无外力他们都将无法进行
条件:
互斥:线程个个都得独占一个资源,别的进不来
请求与保持:不放过拥有,请求另一资源被阻塞
不剥夺:占着的没使用完不能强行剥夺
循环等待:若干线程间形成了一种头尾相接的等待资源
原因:访问共享资源顺序不当
*死锁例子:(同步嵌套同步)

  1. class Test implements Runnable {
  2.         private boolean flag;

  3.         Test(boolean flag) // 构造函数 用来初始化
  4.         {
  5.                 this.flag = flag;
  6.         }

  7.         public void run() {
  8.                 if (flag) {
  9.                         while (true) {
  10.                                 synchronized (MyLock.locka) {
  11.                                         System.out.println(Thread.currentThread().getName()
  12.                                                         + "...if locka ");
  13.                                         synchronized (MyLock.lockb) {
  14.                                                 System.out.println(Thread.currentThread().getName()
  15.                                                                 + "..if lockb");
  16.                                         }
  17.                                 }
  18.                         }
  19.                 } else {
  20.                         while (true) {
  21.                                 synchronized (MyLock.lockb) {
  22.                                         System.out.println(Thread.currentThread().getName()
  23.                                                         + "..else lockb");
  24.                                         synchronized (MyLock.locka) {
  25.                                                 System.out.println(Thread.currentThread().getName()
  26.                                                                 + ".....else locka");
  27.                                         }
  28.                                 }
  29.                         }
  30.                 }
  31.         }
  32. }

  33. class MyLock {
  34.         static Object locka = new Object();
  35.         static Object lockb = new Object();
  36. }

  37. public class DeadLockTest {
  38.         public static void main(String[] args) {
  39.                 Thread t1 = new Thread(new Test(true));
  40.                 Thread t2 = new Thread(new Test(false));
  41.                 t1.start();
  42.                 t2.start();
  43.         }

  44. }
复制代码



死锁.jpg (625.83 KB, 下载次数: 4)

死锁

死锁

作者: liujingnan    时间: 2014-8-5 23:26
受教了。
作者: 张涛的狂怒    时间: 2014-8-5 23:31
嗯嗯嗯嗯,赞一个
作者: fantacyleo    时间: 2014-8-5 23:48
你的图非常漂亮,是用什么软件作的?
作者: 威猛的小熊    时间: 2014-8-5 23:54
我是来学习的。。。。
作者: 我行我SHOW‰    时间: 2014-8-6 00:53
过来学习一下~~~~
作者: Bermuda     时间: 2014-8-6 07:57
fantacyleo 发表于 2014-8-5 23:48
你的图非常漂亮,是用什么软件作的?

用Xmind做的 ,看完视频我都会试着画一下
要是话软件图的话可以用visio,rose
作者: blz01003hm    时间: 2014-8-6 10:27
还画图了,给力啊
作者: fantacyleo    时间: 2014-8-6 10:28
Bermuda  发表于 2014-8-6 07:57
用Xmind做的 ,看完视频我都会试着画一下
要是话软件图的话可以用visio,rose ...

get√ 多谢!




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