java死锁检测

/*** @author:cp* @time:2021-2-24* @Description: java死锁测试* 进程id查看命令:jsp 找到对应的进程id* 通过jstack 进程id 输出死锁信息** 如何定位死循环导致的其他线程阻塞等待:* linux下top命令查看cpu使用率较高的java进程,进而用top -Hp ➕pid查看该java进程下cpu使用率较高的线程。再用jstack命令查看线程具体调用情况,排查问题。*/
public class DeadLockSample extends Thread {private String first;private String second;public DeadLockSample(String name, String first, String second) {super(name);this.first = first;this.second = second;}public void run() {synchronized (first) {System.out.println(this.getName() + " obtained: " + first);try {Thread.sleep(1000L);synchronized (second) {System.out.println(this.getName() + " obtained: " + second);}} catch (InterruptedException e) {// Do nothing}}}//死锁/*public static void main(String[] args) throws InterruptedException {String lockA = "lockA";String lockB = "lockB";DeadLockSample t1 = new DeadLockSample("Thread1", lockA, lockB);DeadLockSample t2 = new DeadLockSample("Thread2", lockB, lockA);t1.start();t2.start();t1.join();t2.join();}*/public static void main(String[] args) throws InterruptedException {ThreadMXBean mbean = ManagementFactory.getThreadMXBean();Runnable dlCheck = new Runnable() {@Overridepublic void run() {long[] threadIds = mbean.findDeadlockedThreads();if (threadIds != null) {ThreadInfo[] threadInfos = mbean.getThreadInfo(threadIds);System.out.println("Detected deadlock threads:");for (ThreadInfo threadInfo : threadInfos) {System.out.println(threadInfo.getThreadName());}}}};ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);// 稍等5秒,然后每10秒进行一次死锁扫描scheduler.scheduleAtFixedRate(dlCheck, 5L, 10L, TimeUnit.SECONDS);//死锁代码String lockA = "lockA";String lockB = "lockB";DeadLockSample t1 = new DeadLockSample("Thread1", lockA, lockB);DeadLockSample t2 = new DeadLockSample("Thread2", lockB, lockA);t1.start();t2.start();t1.join();t2.join();}
}

上述代码示例会产生死锁

总结:

1、进程id查看命令:jsp 找到对应的进程id
* 通过jstack 进程id 输出死锁信息
2、如何定位死循环导致的其他线程阻塞等待:
* linux下top命令查看cpu使用率较高的java进程,进而用top -Hp ➕pid查看该java进程下cpu使用率较高的线程。再用jstack命令查看线程具体调用情况,排查问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

div始终在底部

<style type"text/css">body{margin:0;padding:0; } html,body{height:100%;}div{width:100%;height:100px;background:#fc9;position:absolute;top:100%;margin-top:-100px}</style><div></div> 底部多高它的margin-top 就负多少。保证不留…

“睡服”面试官系列第十八篇之generator函数的语法(建议收藏学习)

目录 1简介 1.1基本概念 1.2yield 表达式 1.3与 Iterator 接口的关系 2. next 方法的参数 3. for...of 循环 4. Generator.prototype.throw() 5. Generator.prototype.return() 6. next()、throw()、return() 的共同点 7. yield* 表达式 8. 作为对象属性的 Generator…

微信撤回消息格式

<msg><fromusername>wxid_1zcdlm1cjhr522</fromusername><scene>0</scene><commenturl></commenturl><appmsg appid"" sdkver"0"><title>还好</title><des></des><action>…

MSSQL 2005数据库与SP4补丁安装

MSSQL 2005数据库与SP4补丁安装 Sql Server 2005 正确安装之前的win7配置&#xff1a; http://wenku.baidu.com/link?url6T3jzVnu2XY_sfqfe9ZqQ_6dUOdrZwHc83baWh6tgD2D4RBLnbFVoYn5hpq80v3G9ZmE1mQMzmSVWbm6VR26LlSGg3Pobl6B5VskugHjYF7 Sql Server 2005 的下载地址&#xff…

“睡服”面试官系列第十九篇之async函数(建议收藏学习)

目录 1. 含义 2. 基本用法 3. 语法 3.1返回 Promise 对象 3.2Promise 对象的状态变化 3.3await 命令 3.4错误处理 3.5使用注意点 4. async 函数的实现原理 5. 与其他异步处理方法的比较 6. 实例&#xff1a;按顺序完成异步操作 7. 异步遍历器 7.1异步遍历的接口 …

spring技术内幕——深入解析spring架构与设计原理

林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;说&#xff1a;“我从心底认为&#xff0c;优秀的程序员与平庸的程序员之间的区别&#xff0c;是在于认为自己的代码重要还是数据结构更加重要。平庸的程序员眼里只有代码&#xff0c;优秀的程序员则关注数据结构及之前的关…

python3 字符串方法

python3 字符串方法 1.capitalize() 将字符串的第一个字符改为大写 1 >>> si love cnblog 2 >>> s.capitalize() 3 I love cnblog 2.casefold() 将字符串所有字符改为小写 1 >>> (s.capitalize()).casefold() 2 i love cnblog 3.center(width) 将字…

重学算法第三期|数据结构与算法001

目录 强烈推荐一个数据结构可视化工具&#xff1a;https://www.cs.usfca.edu/~galles/visualization/Algorithms.html&#xff0c;点击B树即可模拟B树的动态插入过程&#xff0c;非常有利于理解 1、开篇词 2、为什么要学习数据结构与算法 3、如何抓住重点&#xff0c;系统高…

部署和调优 3.4 腾讯企业邮箱免费版 未完

浏览器输入腾讯的企业邮箱官网 exmail.qq.com 点右上角的 申请开通 最下面有个 免费版 填好基本信息 根据提示验证密保邮箱 转载于:https://www.cnblogs.com/wangshaojun/p/5079304.html

前端学习(1715):前端系列javascript之页面配置

test-page.vue <template><view>test-page</view> </template><script>export default {data() {return {}},methods: {}} </script><style></style>page.json {"pages": [ //pages数组中第一项表示应用启动页&a…

03|复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?

目录 为什么需要复杂度分析&#xff1f; 大 O 复杂度表示法 时间复杂度分析 几种常见时间复杂度 空间复杂度分析 为什么需要复杂度分析&#xff1f; 事后统计法&#xff1a;代码跑一遍&#xff0c;通过统计、监控&#xff0c;就能得到算法执行的时间和占用的内存大小。这种…

前端学习(1716):前端系列javascript之页面配置下

page.vue {"pages": [ //pages数组中第一项表示应用启动页&#xff0c;参考&#xff1a;https://uniapp.dcloud.io/collocation/pages{"path" : "pages/test-page/test-page","style" : {"navigationBarTitleText":"t…

04 | 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度

// n表示数组array的长度 int find(int[] array, int n, int x) {int i 0;int pos -1;for (; i < n; i) {if (array[i] x) {pos i;break;}}return pos; } 这段代码的时间复杂度还是 O(n) 吗&#xff1f;如果数组中第一个元素正好是要查找的变量 x&#xff0c;那就不需要…

Atitit.java swing打印功能 api  attilax总结

Atitit.java swing打印功能 api attilax总结 1. 打印方式有三种&#xff1a;2 1.1. 一是不经过任何修改&#xff0c;直接调用javascript中的window.print()打印。2 1.2. 二根据客户要求的报表格式&#xff0c;编写相应格式的html&#xff0c;装载数据打印&#xff0c;同样调用…

git clone 速度过慢

由于公司内网限制&#xff0c;通过git clone mybatis的源码时速度贼慢 原来的方式&#xff1a;git clone ​​​​​​​https://github.com/mybatis/mybatis-3.git 超级慢——失败 改进方式&#xff1a;git clone https://github.com.cnpmjs.org/mybatis/mybatis-3.git 贼快…

2016/1/4 学习笔记 数据类型转换 注释 语句

⑤ 数据类型转换 自动转换&#xff1a; 一般在算术运算过程中进行自 动转换为数字类型比较大的类型 由低级到高级转换 强制转换&#xff1a;又叫做显示转换。 1&#xff0c;从高精…

前端学习(1718):前端系列javascript之生命周期上

<script>export default {onLaunch: function() {console.log(App Launch)//登录//用户信息//存储},onShow: function() {console.log(App Show)//时间戳//计算用胡得使用时间},onHide: function() {console.log(App Hide)//应用进入后台所作得得事情},onError(e){consol…

05 | 数组:为什么很多编程语言中数组都从0开始编号?

什么是数组&#xff1f; 数组&#xff08;Array&#xff09;是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来存储一组具有相同类型的数据。 线性表存储结构连续内存空间存储相同类型数据 优点&#xff1a;连续内存相同类型数据数组可以实现随机访问 缺点&#…

远离你身边消极爱抱怨的人!!

跟着苍蝇你會找到厕所&#xff0c; 跟着蜜蜂你會找到花朵&#xff0c; 跟着千万赚百万&#xff0c; 跟着乞丐会要饭. 现实生活中&#xff0c; 你和谁在一起的确很重要&#xff0c; 甚至能改变你的成长轨迹&#xff0c; 决定你的人生成败。 和什么样的人在一起&#xff0c; 就会…