zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

JVM线程编程语言 详解 所有 列出 组和
2023-06-13 09:20:30 时间

这个类包含一个有用的静态方法列出所有在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

cgojava