博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
死锁排查的小窍门 --使用jdk自带管理工具jstack
阅读量:6948 次
发布时间:2019-06-27

本文共 1817 字,大约阅读时间需要 6 分钟。

本文版权归 远方的风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

可以发现该段程序死锁!

转载于:https://www.cnblogs.com/lyhc/p/7078160.html

你可能感兴趣的文章
转:最佳实践:更好的设计你的 REST API
查看>>
Facebook被指“山寨”,背后真相是“炒作”还是……
查看>>
不要相信短信:iOS漏洞允许用户发送虚假短信
查看>>
南阳845(无主之地)
查看>>
笔迹之始
查看>>
C语言程序设计第六次作业
查看>>
轻松理解Redux原理及工作流程
查看>>
php正则表达式 常用记录
查看>>
UIScrollView
查看>>
009-定时关闭弹出广告窗口 By BoAi 20190414
查看>>
访问EP提示You cannot view data on this page because…错误
查看>>
Visio绘制系统图
查看>>
TCP/IP详解--拥塞控制 & 慢开始、拥塞避免、快重传和快恢复。
查看>>
国网做泛在电力物联网的初衷是什么?如何参与?
查看>>
Native App执行JS
查看>>
ros发生找不到ip的情况
查看>>
Java实践 — SSH远程执行Shell脚本
查看>>
了解swagger
查看>>
初探装饰器模式
查看>>
[转载] 七龙珠第一部——第128话 象天空一般静寂
查看>>