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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Bermuda  中级黑马   /  2014-8-5 20:51  /  1441 人查看  /  8 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 格子、 于 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, 下载次数: 2)

死锁

死锁

评分

参与人数 3技术分 +1 黑马币 +10 收起 理由
张然龙 + 5 很给力!
格子、 + 1 代码还是format一下看着舒服
fantacyleo + 5

查看全部评分

8 个回复

倒序浏览
受教了。
回复 使用道具 举报
嗯嗯嗯嗯,赞一个
回复 使用道具 举报
你的图非常漂亮,是用什么软件作的?
回复 使用道具 举报
威猛的小熊 来自手机 高级黑马 2014-8-5 23:54:17
报纸
我是来学习的。。。。
回复 使用道具 举报
过来学习一下~~~~
回复 使用道具 举报
fantacyleo 发表于 2014-8-5 23:48
你的图非常漂亮,是用什么软件作的?

用Xmind做的 ,看完视频我都会试着画一下
要是话软件图的话可以用visio,rose
回复 使用道具 举报
还画图了,给力啊
回复 使用道具 举报
Bermuda  发表于 2014-8-6 07:57
用Xmind做的 ,看完视频我都会试着画一下
要是话软件图的话可以用visio,rose ...

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