码迷,mamicode.com
首页 > 其他好文 > 详细

死锁问题

时间:2019-07-27 18:32:17      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:false   线程   dex   stat   code   sleep   bsp   运行   ace   

当线程中锁中套锁,两个线程在运行时都需要对方所占用的锁而不释放自己的锁,这样就造成了线程的停滞。下面通过一个例子来演示死锁的形成和避免办法。

 1 package cn.ftf.threadsafe;
 2 /**
 3  * 过多的同步可能会造成互相不释放资源,从而相互等待,一般发生于同步中持有多个对象的锁,锁中套锁
 4  * 
 5  * 避免:不要再在同一代码块中同时持有多个对象的锁,避免锁中上锁
 6  * @author 房廷飞
 7  *
 8  */
 9 public class DeadLockThread implements Runnable{
10     static Object a=new Object();   //用Static关键字修饰,保证实例化多少个对象都是这同一个同一个对象
11     static Object b=new Object();
12     private boolean flag;
13     public DeadLockThread(boolean flag) {
14         super();
15         this.flag = flag;
16     }
17     @Override
18     public void run() {
19         if(flag) {
20             synchronized (a) {
21                 System.out.println("给  a 对象上锁了。");
22                 try {
23                     Thread.sleep(200);
24                 } catch (InterruptedException e) {
25                     e.printStackTrace();
26                 }
27                 synchronized (b) {
28                     System.out.println("给  b 对象上锁了。 a 锁中上锁");
29                 }
30             }
31         }else {
32             synchronized (b) {
33                 System.out.println("给  b 对象上锁了。");
34                 try {
35                     Thread.sleep(200);
36                 } catch (InterruptedException e) {
37                     e.printStackTrace();
38                 }
39                 synchronized (a) {
40                     System.out.println("给  a 对象上锁了。  b 锁中上锁");
41                 }
42             }
43         }
44     }
45     public static void main(String[] args) {
46         DeadLockThread dead1=new DeadLockThread(true);
47         DeadLockThread dead2=new DeadLockThread(false);
48         
49         new Thread(dead1).start();
50         new Thread(dead2).start();
51     }
52 }
53 
54 /*
55 运行结果:
56 
57 给  b 对象上锁了。
58 给  a 对象上锁了。
59 
60 */
61 
62 //避免办法:避免锁中上锁

 

死锁问题

标签:false   线程   dex   stat   code   sleep   bsp   运行   ace   

原文地址:https://www.cnblogs.com/fangtingfei/p/11256097.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!