这是我在Java中的简单程序:
public class Counter extends Thread {
public static void main(String args[]) {
Thread t1 = new Thread();
Thread t2 = new Thread();
t1.start();
t2.start();
}
}
我正在使用Windows操作系统32位。我的问题是,我们怎么知道程序中创建了多少线程以及运行了多少线程?有没有这样的工具?
答案 0 :(得分:18)
System.out.println(“来自给定线程的活动线程数:”+ Thread.activeCount());
答案 1 :(得分:9)
Thread.getAllStackTraces()
将为您提供每个Thread都是键的映射。然后,您可以检查每个线程的状态并检查thread.isAlive()
。
Map<Thread, StackTraceElement[]> threads = Thread.getAllStackTraces();
答案 2 :(得分:5)
您可以使用以下方法访问程序中有关线程的所有可用信息: http://docs.oracle.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html
如果您只是需要一个工具,您可以使用jconsole,jvisualvm以及其他可以显示gui中正在运行的线程的详细信息的分析工具。
答案 3 :(得分:5)
如果你想要线程本身,我使用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;
}
答案 4 :(得分:1)
您可以使用Thread
方法从getAllStackTraces()
类获取一组正在运行的线程。使用getState()
API迭代该设置并打印当前状态。
示例代码:
import java.util.Set;
public class ThreadSet {
public static void main(String args[]){
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
for ( Thread t : threadSet){
System.out.println("Thread :"+t+":"+"state:"+t.getState());
}
}
}
如果您只希望调用main的Thread会在输出中列出,那么您会感到惊讶。
<强> 输出: 强>
java ThreadSet
Thread :Thread[Finalizer,8,system]:state:WAITING
Thread :Thread[main,5,main]:state:RUNNABLE
Thread :Thread[Reference Handler,10,system]:state:WAITING
Thread :Thread[Signal Dispatcher,9,system]:state:RUNNABLE
Thread :Thread[Attach Listener,5,system]:state:RUNNABLE