Paw*_*wan 18 java multithreading
这是我在Java中的简单程序:
public class Counter extends Thread {
public static void main(String args[]) {
Thread t1 = new Thread();
Thread t2 = new Thread();
t1.start();
t2.start();
}
}
Run Code Online (Sandbox Code Playgroud)
我使用32位Windows操作系统.我的问题是,我们怎么知道在程序中创建了多少线程以及运行了多少线程?有没有这样的工具?
dex*_*son 20
System.out.println("给定线程的活动线程数:"+ Thread.activeCount());
And*_*ejs 10
Thread.getAllStackTraces()将为您提供每个线程都是关键的地图.然后,您可以检查每个线程的状态并进行检查thread.isAlive().
Map<Thread, StackTraceElement[]> threads = Thread.getAllStackTraces();
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令访问程序中有关线程的所有可用信息:http: //docs.oracle.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html
如果您只需要一个工具,您可以使用jconsole,jvisualvm以及其他可以显示gui中正在运行的线程的详细信息的分析工具.
如果你想要线程本身,我使用ThreadMXBean这个方法:
/**
* Return an array with all current threads.
* @return Thread[] - array of current Threads
*/
Thread[] getAllThreads(){
final ThreadGroup root = getRootThreadGroup();
final ThreadMXBean thbean = ManagementFactory.getThreadMXBean();
int nAlloc = thbean.getThreadCount();
int n=0;
Thread[] threads;
do{
nAlloc *=2;
threads = new Thread[nAlloc];
n=root.enumerate(threads, true);
}while(n==nAlloc);
return java.util.Arrays.copyOf(threads, n);
}
/**
* Get current ThreadGroup.
* @see getAllThreads()
* @return
*/
ThreadGroup getRootThreadGroup(){
ThreadGroup tg = Thread.currentThread().getThreadGroup();
ThreadGroup ptg;
while ((ptg=tg.getParent())!=null){
tg = ptg;
}
return tg;
}
Run Code Online (Sandbox Code Playgroud)