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

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

可以发现该段程序死锁!

时间: 2024-08-01 10:41:15

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

使用JDK自带的工具将中文转换为ascii码

有时候在MyEclipse中,文件只能保存为“ISO-8859-1”的类型,而这种类型的文件时无法保存中文数据的,那么我们只能将中文数据经过Unicode编码才能往文件中保存,这里可以使用JDK自带的工具——native2ascii. 使用命令行窗口,输入“native2ascii”,如下图所示: 输完回车后,光标会另起一行,这时候就可以输入中文了,按回车结束,对应的Unicode码会在下一行显示:

转 JDK自带日志工具Logger的研究使用

之前写过一篇也是使用jdk自带的日志,本文为借鉴别人的另一种方法,我是java共享者,共创java未来!! 关于Logger最近放假在家无聊,研究一个开源框架时发现它频繁运用到了一个叫Logger的相关类来进行日志记录,作为log4j的忠实粉丝,在大多数项目上都看到的是log4j和commons-logging,这个Logger为何物?点开源码看,才发现是JDK自带的日志类,非第三方开源Jar包,于是便起了好奇之心,想看看这个Logger与log4j和commons-logging有何不同,翻了

用JDK自带的工具生成客户端调用Webservice的代码

JAVA下客户端调用Webservice代码简直是让人心生畏惧,今日尝试,做记录如下,参考网上的众多解决方案,下面这种方式是比较简单的. 在jdk的bin目录下有一个wsimport.exe的工具,使用该工具可以根据wsdl地址生成java的客户端代码. 常用命令如下: "D:\Program Files\Java\jdk1.8.0_05\bin\wsimport.exe" -keep -d d:\ -s d:\src -p com.map -verbose http://192.16

记录一次Mysql死锁排查过程

背景 以前接触到的数据库死锁,都是批量更新时加锁顺序不一致而导致的死锁,但是上周却遇到了一个很难理解的死锁.借着这个机会又重新学习了一下mysql的死锁知识以及常见的死锁场景.在多方调研以及和同事们的讨论下终于发现了这个死锁问题的成因,收获颇多.虽然是后端程序员,我们不需要像DBA一样深入地去分析与锁相关的源码,但是如果我们能够掌握基本的死锁排查方法,对我们的日常开发还是大有裨益的. 死锁起因 先介绍一下数据库和表情况,因为涉及到公司内部真实的数据,所以以下都做了模拟,不会影响具体的分析. 我们

防水刷漆小窍门

我们都知道墙面涂料的选择是家装中很重要的环节,只要选择一款好的墙面涂料进行刷漆,对于顺利进行过程有着不容忽视的作用. 1.墙面处理 一般装修墙面时首先要把普通基面处理平整,对于比较疏松的底材必须进行界面处理.预制板.板缝需专业密封处理后再进行施工.墙面比较大的孔洞以及裂缝应先用砂浆修补再用油漆处理.对这些小细节装修中万万不可忽视,而夏季装修更要关注混凝土的含水量,防止出现后期墙面气泡的现象. 2.底材处理 墙面基面处理完后,下面就是处理底材了.涂料均匀涂刷至底材,重新至少2次或多次,防水层厚度大

SQL Server死锁排查

1. 死锁原理 根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态. 死锁的四个必要条件:互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用.请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源.非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺.循环等待条件(Circular wait):系统中若干进程组成

做优秀产品经理的七个小窍门

产品经理是IT和互联网行业的热门职位,因为带着个经理的后缀,让人觉得比其他程序员.测试工程师什么的天生就高了一头.再加上各种媒体.大佬或成功人士把产品经理称为小“CEO”的说法,赋予这个职位各种光环,让不少新老同学决心投身这个潜力巨大的职业.另一方面,产品经理的确可以说是互联网团队的骨干,一边对接用户.市场.客户和各种外部伙伴,另一边连着开发.测试.运营等内部资源,经常直接影响或决定着一个功能.产品.业务甚至公司的成败.好的产品经理需要有感觉.有想法.能沟通.能设计,绝不是一天练成的.关于如何成

多人协作时编辑word文档的一个小窍门

多人协作时编辑word文档的一个小窍门 最近在工作中编写标书时由于不同内容分给了各个部门去制作,但是在汇总后遇到再次修改的问题.对方把修改后的部分文档发给我粘贴到标书中后,所有的格式全部都乱了.重新整理格式.标题,每次导入新的文档都重复这个工作,真是低效啊.事后想想word这么高级的文档编辑工具,肯定会有解决办法吧? 解决办法一 文档合并 将每个章节划分为多个文档,文档名称命名为章节编号,然后: 我们需要新建一个word文档并对这个文档的页面进行设置,使之与要合并的其他文档的页面设置保持一致,或

实用的美容护肤小窍门,轻松击退“黄脸婆”

所谓“没有丑女人,只有懒女人”,相信大家再熟悉不过,看实用的美容护肤小窍门,让你轻松击退“黄脸婆”. 小窍门1:保持肌肤的清洁 保持肌肤的清洁,说是容易,但却很多美眉做不到,很多美眉都喜欢化妆来掩盖脸部的瑕疵,但化妆容易堵塞毛孔,因此,洁面.卸妆对保持肌肤清洁起着关键的作用,所以,无论是早上,还是晚上,或是健身后,都要适当的清洁脸部的肌肤. 小窍门2:啤酒收缩毛孔 这种小窍门很多美眉都懂,但可能方法会不正确,因为用啤酒做成面膜,首先要将啤酒开盖一两天,这样可以挥发掉啤酒的酒精,不会刺激到肌肤,然