列出JVM中所有的线程组和线程详解编程语言

这个类包含一个有用的静态方法列出所有在JVM中的线程和线程组。它也有一个简单的main()方法,以便它可以作为一个独立的程序运行。

import java.awt.BorderLayout; 
import java.io.PrintWriter; 
import java.io.StringWriter; 
 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
 
/** 
 * This class contains a useful static method for listing all threads and 
 * threadgroups in the VM. It also has a simple main() method so it can be run 
 * as a standalone program. 
 */ 
public class ThreadLister { 
  /** Display information about a thread. */ 
  private static void printThreadInfo(PrintWriter out, Thread t, String indent) { 
    if (t == null) 
      return; 
    out.println(indent + "Thread: " + t.getName() + "  Priority: " + t.getPriority() 
        + (t.isDaemon() ? " Daemon" : "") + (t.isAlive() ? "" : " Not Alive")); 
  } 
 
  /** Display info about a thread group and its threads and groups */ 
  private static void printGroupInfo(PrintWriter out, ThreadGroup g, String indent) { 
    if (g == null) 
      return; 
    int num_threads = g.activeCount(); 
    int num_groups = g.activeGroupCount(); 
    Thread[] threads = new Thread[num_threads]; 
    ThreadGroup[] groups = new ThreadGroup[num_groups]; 
 
    g.enumerate(threads, false); 
    g.enumerate(groups, false); 
 
    out.println(indent + "Thread Group: " + g.getName() + "  Max Priority: " + g.getMaxPriority() 
        + (g.isDaemon() ? " Daemon" : "")); 
 
    for (int i = 0; i < num_threads; i++) 
      printThreadInfo(out, threads[i], indent + "    "); 
    for (int i = 0; i < num_groups; i++) 
      printGroupInfo(out, groups[i], indent + "    "); 
  } 
 
  /** Find the root thread group and list it recursively */ 
  public static void listAllThreads(PrintWriter out) { 
    ThreadGroup current_thread_group; 
    ThreadGroup root_thread_group; 
    ThreadGroup parent; 
 
    // Get the current thread group 
    current_thread_group = Thread.currentThread().getThreadGroup(); 
 
    // Now go find the root thread group 
    root_thread_group = current_thread_group; 
    parent = root_thread_group.getParent(); 
    while (parent != null) { 
      root_thread_group = parent; 
      parent = parent.getParent(); 
    } 
 
    // And list it, recursively 
    printGroupInfo(out, root_thread_group, ""); 
  } 
 
  /** 
   * The main() method create a simple graphical user interface to display the 
   * threads in. This allows us to see the "event dispatch thread" used by AWT 
   * and Swing. 
   */ 
  public static void main(String[] args) { 
    // Create a simple Swing GUI 
    JFrame frame = new JFrame("ThreadLister Demo"); 
    JTextArea textarea = new JTextArea(); 
    frame.getContentPane().add(new JScrollPane(textarea), BorderLayout.CENTER); 
    frame.setSize(500, 400); 
    frame.setVisible(true); 
 
    // Get the threadlisting as a string using a StringWriter stream 
    StringWriter sout = new StringWriter(); // To capture the listing 
    PrintWriter out = new PrintWriter(sout); 
    ThreadLister.listAllThreads(out); // List threads to stream 
    out.close(); 
    String threadListing = sout.toString(); // Get listing as a string 
 
    // Finally, display the thread listing in the GUI 
    textarea.setText(threadListing); 
  } 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10828.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论