码迷,mamicode.com
首页 > Web开发 > 详细

死锁排查的小窍门 --使用jdk自带管理工具jstack

时间:2017-06-25 22:10:23      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:使用   images   class   span   声明   sync   jps   out   链接   

本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。

 

开发时间久了,难免会写出一些一些死锁的代码,自己明明调用该方法可该方法就是不执行、不进该方法、日志也不打印!

这里我们模拟一段死锁的代码,使用jdk自带的管理工具来排查是不是死锁了!

 1 //思索代码
 2 public class DeadLockDemo  implements Runnable{
 3 
 4         public int flag = 1;
 5         //静态对象是类的所有对象共享的
 6         private static Object o1 = new Object(), o2 = new Object();
 7         @Override
 8         public void run() {
 9             System.out.println("flag=" + flag);
10             if (flag == 1) {
11                 synchronized (o1) {
12                     try {
13                         Thread.sleep(500);
14 
15                     } catch (Exception e) {
16                         e.printStackTrace();
17                     }
18                     synchronized (o2) {
19                         System.out.println("1");
20                     }
21                 }
22             }
23             if (flag == 0) {
24                 synchronized (o2) {
25                     try {
26                         Thread.sleep(500);
27                     } catch (Exception e) {
28                         e.printStackTrace();
29                     }
30                     synchronized (o1) {
31                         System.out.println("0");
32                     }
33                 }
34             }
35         }
36 
37         public static void main(String[] args) {
38 
39             DeadLockDemo td1 = new DeadLockDemo();
40             DeadLockDemo td2 = new DeadLockDemo();
41             td1.flag = 1;
42             td2.flag = 0;
43             //td1,td2都处于可执行状态,但JVM线程调度先执行哪个线程是不确定的。
44             //td2的run()可能在td1的run()之前运行
45             new Thread(td1).start();
46             new Thread(td2).start();
47 
48         }
49     }

启动该段代码,执行之后一直卡着

技术分享

接下来我们在终端使用指令 jps查询该类的端口号为7824

技术分享

 

再使用 jstack 端口号

jstack 7824

技术分享

可以发现该段程序死锁!

死锁排查的小窍门 --使用jdk自带管理工具jstack

标签:使用   images   class   span   声明   sync   jps   out   链接   

原文地址:http://www.cnblogs.com/lyhc/p/7078160.html

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