当前位置: 首页 > news >正文

java死锁检测

执行下面代码

public class DeadLock {public static String obj1 = "obj1";public static String obj2 = "obj2";public static void main(String[] args){Thread a = new Thread(new Lock1());Thread b = new Thread(new Lock2());a.start();b.start();}
}public class Lock1 implements Runnable{@Overridepublic void run(){try{System.out.println("Lock1 running");while(true){synchronized(DeadLock.obj1){System.out.println("Lock1 lock obj1");Thread.sleep(3000);//获取obj1后先等一会儿,让Lock2有足够的时间锁住obj2synchronized(DeadLock.obj2){System.out.println("Lock1 lock obj2");}}}}catch(Exception e){e.printStackTrace();}}
}public class Lock2 implements Runnable{@Overridepublic void run(){try{System.out.println("Lock2 running");while(true){synchronized(DeadLock.obj2){System.out.println("Lock2 lock obj2");Thread.sleep(3000);synchronized(DeadLock.obj1){System.out.println("Lock2 lock obj1");}}}}catch(Exception e){e.printStackTrace();}}
}

打开命令行,执行jvisualvm命令

jvisualvm界面显示检测出死锁信息

执行线程dump

从上面的日志信息可以看到,两个线程分别在等待获取锁,而且可以发现线程执行代码行数。

以上是通过可视化界面检测死锁,下面通过命令行来排查死锁

分别执行jps 和 jstack命令

这里通过jps找到2453的进程号

通过线程堆栈信息,可检测到死锁信息。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Harmony】SCU暑期实训鸿蒙开发学习日记Day1
  • mysql 8新特性
  • Perl 语言开发(十三):网络编程
  • GO语言中的接口(interface)
  • 【Linux】01.Linux 的常见指令
  • Javassist 修改 jar 包里的 class 文件
  • XXL-JOB:定时任务框架的实战应用与调度方式详解
  • 互联网末法时代的一些思考
  • 【机器学习】分类算法-支持向量机
  • 深入理解 Vue.js 中的 nextTick:原理与应用
  • mysql高版本(8.0+)group_by报错的处理方法
  • XBOX360-玩体感游戏时提示:您必须进行系统更新,才能使用Kinect
  • Mysql解忧杂货铺
  • STM32第九课:STM32-基于标准库的42步进电机的简单I/O控制(附电机教程,看到即赚到)
  • 一五六、Node+Vue 使用七牛上传图片,并配置个人域名
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • IP路由与转发
  • JavaScript-Array类型
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 笨办法学C 练习34:动态数组
  • 从零开始的无人驾驶 1
  • 读懂package.json -- 依赖管理
  • 番外篇1:在Windows环境下安装JDK
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 我从编程教室毕业
  • 小程序button引导用户授权
  • AI算硅基生命吗,为什么?
  • UI设计初学者应该如何入门?
  • 第二十章:异步和文件I/O.(二十三)
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​【已解决】npm install​卡主不动的情况
  • ​批处理文件中的errorlevel用法
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #WEB前端(HTML属性)
  • (4.10~4.16)
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (学习日记)2024.01.09
  • (一)Neo4j下载安装以及初次使用
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (一)基于IDEA的JAVA基础10
  • (转)菜鸟学数据库(三)——存储过程
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net FrameWork简介,数组,枚举
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET Micro Framework初体验(二)
  • .NET Remoting学习笔记(三)信道
  • .net 验证控件和javaScript的冲突问题