日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java简单的死锁检测(转载线下代码)

發布時間:2024/4/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java简单的死锁检测(转载线下代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一個簡單的死鎖檢測功能、

1.探測出死鎖
主要是:java.lang.management類的關于線程的系列方法
一個線程監控類
ThreadMXBean x=ManagementFactory.getThreadMXBean();

使用x的方法
findDeadlockedThreads();
得到發生死鎖線程的ID
通過ID獲取線程信息ThreadInfo發送到處理類

package com.j.osdemo.deadlockcheck;import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit;/*** @Author {一位講師}* @Version 1.0* @Description 死鎖探測器* @Date: 2020/4/27 0027*/ public class DeadLockDetector {/*定義死鎖線程處理類*/private final DeadlockHandler deadlockHandler;/*定義時間量*/private final long period;/*定義時間單位*/private final TimeUnit unit;/*開啟線程監控類*/private final ThreadMXBean mbean = ManagementFactory.getThreadMXBean();/*定義一個線程池*/private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);final Runnable deadlockCheck = new Runnable() {@Overridepublic void run() {/*得到死鎖線程的Thread ID*/long[] deadlockedThreadIds = DeadLockDetector.this.mbean.findDeadlockedThreads();if (deadlockedThreadIds != null) {/*根據線程ID,得到所有的死鎖線程*/ThreadInfo[] threadInfos =DeadLockDetector.this.mbean.getThreadInfo(deadlockedThreadIds);/*調用死鎖線程處理器中的方法,進行死鎖線程的處理*/DeadLockDetector.this.deadlockHandler.handleDeadlock(threadInfos);}}};public DeadLockDetector(final DeadlockHandler deadlockHandler,final long period, final TimeUnit unit) {this.deadlockHandler = deadlockHandler;this.period = period;this.unit = unit;}/*** 線程開啟檢測*/public void start() {this.scheduler.scheduleAtFixedRate(this.deadlockCheck, this.period, this.period, this.unit);} }

2.死鎖處理(一般是警報)

package com.j.osdemo.deadlockcheck;import java.lang.management.ThreadInfo; import java.util.Map;/*** @Author {一位講師}* @Version 1.0* @description 死鎖處理* @Date: 2020/4/27 0027 */ public class DeadlockConsoleHandler implements DeadlockHandler {@Overridepublic void handleDeadlock(final ThreadInfo[] deadlockedThreads) {if (deadlockedThreads != null) {/*死鎖線程 被檢測到*/System.err.println("Deadlock detected!");Map<Thread, StackTraceElement[]> stackTraceMap = Thread.getAllStackTraces();for (ThreadInfo threadInfo : deadlockedThreads) {if (threadInfo != null) {for (Thread thread : Thread.getAllStackTraces().keySet()) {if (thread.getId() == threadInfo.getThreadId()) {System.err.println(threadInfo.toString().trim());for (StackTraceElement ste : thread.getStackTrace()) {System.err.println("t" + ste.toString().trim());}/*此處可以釋放所有鎖,回退,并且等待一段隨機的時間后重試*/}}}}}} }

總結

以上是生活随笔為你收集整理的java简单的死锁检测(转载线下代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。