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

【JUC】死锁的实现及其定位分析

时间:2020-05-28 19:46:01      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:获得   定位   start   exce   rac   排查   gre   exception   ace   

死锁的概念

两个或两个以上的进程在执行过程中,因抢夺资源而造成的一种互相等待的现象,若无外力干涉,它们都无法继续推进,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。

技术图片

 

 

 实现死锁

 1 class HoldLockThread implements Runnable{
 2 
 3     private String lockA;
 4     private String lockB;
 5 
 6     public HoldLockThread(String lockA, String lockB) {
 7         this.lockA = lockA;
 8         this.lockB = lockB;
 9     }
10 
11     @Override
12     public void run() {
13         synchronized (lockA){
14             System.out.println(Thread.currentThread().getName()+"持有"+lockA+",尝试获得"+lockB);
15             try {
16                 TimeUnit.SECONDS.sleep(2);
17             } catch (InterruptedException e) {
18                 e.printStackTrace();
19             }
20             synchronized (lockB){
21                 System.out.println(Thread.currentThread().getName()+"持有"+lockB+",尝试获得"+lockA);
22             }
23         }
24 
25     }
26 }
27 public class DeadLockDemo {
28     public static void main(String[] args) {
29         String lockA = "lockA";
30         String lockB = "lockB";
31         new Thread(
32             new HoldLockThread(lockA,lockB),"张三"
33         ).start();
34         new Thread(
35             new HoldLockThread(lockB,lockA),"李四"
36         ).start();
37     }
38 }

如何排查死锁?

linux: ps -ef|grep xxx

windows:类似ps的查看进程的命令

jps可以用来排查java程序的进程,定位到进程号

技术图片

jstack + 进程号 查看栈信息

 

 

 技术图片

 

栈信息的总结:两个线程导致的死锁

 技术图片

 

【JUC】死锁的实现及其定位分析

标签:获得   定位   start   exce   rac   排查   gre   exception   ace   

原文地址:https://www.cnblogs.com/xdcat/p/12983130.html

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