Java Thread getAllStackTraces() 方法



描述

Java Thread getAllStackTraces() 方法返回所有活動執行緒的堆疊跟蹤對映。對映鍵是執行緒,每個對映值都是一個StackTraceElement陣列,表示相應Thread的堆疊轉儲。

宣告

以下是java.lang.Thread.getAllStackTraces()方法的宣告

public static Map<Thread,StackTraceElement[]> getAllStackTraces()

引數

返回值

此方法返回一個從 Thread 到 StackTraceElement 陣列的對映,該陣列表示相應執行緒的堆疊跟蹤。

異常

SecurityException − 如果存在安全管理器並且其 checkPermission 方法不允許獲取執行緒的堆疊跟蹤。

示例:在多執行緒環境中獲取堆疊跟蹤對映

以下示例演示了 Java Thread getAllStackTraces() 方法的用法。在此程式中,我們透過實現 Runnable 介面建立了一個執行緒類 ThreadDemo。在主方法中,建立 ThreadDemo 物件,並使用該物件建立一個執行緒並啟動它。現在,使用 getAllStackTraces() 方法檢索並列印堆疊跟蹤對映。

package com.tutorialspoint;

import java.util.*;

public class ThreadDemo implements Runnable {
  
   public void run() {
      System.out.println("This is run() method");
   }
  
   public static void main(String args[]) {
      
      ThreadDemo trace = new ThreadDemo();
      Thread t = new Thread(trace);
    
      // this will call run() method
      t.start();
    
      // returns a map of stack traces
      Map m = Thread.getAllStackTraces();
	  System.out.println(m);
   }
} 

輸出

讓我們編譯並執行上述程式,這將產生以下結果:

This is run() method
{Thread[#1,main,5,main]=[Ljava.lang.StackTraceElement;@5caf905d, Thread[#20,Common-Cleaner,8,InnocuousThreadGroup]=[Ljava.lang.StackTraceElement;@27716f4, Thread[#9,Reference Handler,10,system]=[Ljava.lang.StackTraceElement;@8efb846, Thread[#12,Attach Listener,5,system]=[Ljava.lang.StackTraceElement;@2a84aee7, Thread[#10,Finalizer,8,system]=[Ljava.lang.StackTraceElement;@a09ee92, Thread[#19,Notification Thread,9,system]=[Ljava.lang.StackTraceElement;@30f39991, Thread[#21,Thread-0,5,]=[Ljava.lang.StackTraceElement;@452b3a41, Thread[#11,Signal Dispatcher,9,system]=[Ljava.lang.StackTraceElement;@4a574795}

示例:在單執行緒程式中獲取堆疊跟蹤對映

以下示例演示了 Java Thread getAllStackTraces() 方法的用法。在此程式中,我們建立了一個類 ThreadDemo。在主方法中,使用 currentThread() 方法檢索當前執行緒並列印它。使用 activeCount() 檢索並列印活動執行緒的數量。現在,使用 getAllStackTraces() 方法檢索並列印堆疊跟蹤對映。

package com.tutorialspoint;

import java.util.Map;

public class ThreadDemo {

   public static void main(String[] args) {

      Thread t = Thread.currentThread();
      t.setName("Admin Thread");
      
      // set thread priority to 1
      t.setPriority(1);
     
      // prints the current thread
      System.out.println("Thread = " + t);

      int count = Thread.activeCount();
      System.out.println("currently active threads = " + count);
    
      // returns a map of stack traces
      Map m = Thread.getAllStackTraces();
	  System.out.println(m);
   }
} 

輸出

讓我們編譯並執行上述程式,這將產生以下結果:

Thread = Thread[#1,Admin Thread,1,main]
currently active threads = 1
{Thread[#1,Admin Thread,1,main]=[Ljava.lang.StackTraceElement;@2f2c9b19, Thread[#19,Notification Thread,9,system]=[Ljava.lang.StackTraceElement;@31befd9f, Thread[#20,Common-Cleaner,8,InnocuousThreadGroup]=[Ljava.lang.StackTraceElement;@1c20c684, Thread[#12,Attach Listener,5,system]=[Ljava.lang.StackTraceElement;@1fb3ebeb, Thread[#9,Reference Handler,10,system]=[Ljava.lang.StackTraceElement;@548c4f57, Thread[#10,Finalizer,8,system]=[Ljava.lang.StackTraceElement;@1218025c, Thread[#11,Signal Dispatcher,9,system]=[Ljava.lang.StackTraceElement;@816f27d}

java_lang_thread.htm
廣告
© . All rights reserved.