打印當前java程序的線程堆棧

RegPoate 8年前發布 | 2K 次閱讀 Java

打印當前java程序的線程堆棧,包括線程狀態,名字,監視器
</div>

 

打印當前java程序的線程堆棧    

 ThreadMXBean bean = ManagementFactory.getThreadMXBean();
 Map < Thread, StackTraceElement[] > traceMap = Thread.getAllStackTraces();
 Set < Thread > allThreads = traceMap.keySet();
 for (Thread thread: allThreads) {
     StringBuilder msg = new StringBuilder();
     long tid = thread.getId();
     ThreadInfo threadInfo = bean.getThreadInfo(tid);
     if(threadInfo == null){
        continue;
     }
     String lockInfo = threadInfo.getLockName() == null ? " " : ", " + threadInfo.getLockName();
     msg.append("thread id: " + tid + ", name: " + threadInfo.getThreadName() + ", " + threadInfo.getThreadState() + lockInfo).append("\n");
     StackTraceElement[] stackTraces = thread.getStackTrace();
     for (StackTraceElement stackTrace: stackTraces) {
         msg.append("\t").append(stackTrace).append("\n");
     }
     System.out.println(msg);
 }
 本文由用戶 RegPoate 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!