问题出在我运行代码时
public static void main(String... args) throws InterruptedException{
System.out.println(Thread.activeCount());
}
它是2而不是1我认为它会是。 为什么有2个运行线程?因为我认为有1个线程,所以在方法main中称为主线程
答案 0 :(得分:3)
JVM本身可以有任意数量的工作线程,例如GC线程。
答案 1 :(得分:3)
Thread#activeCount返回当前线程组中活动线程的数量。 main thread
的线程组称为main
,在同一组中有另一个名为Monitor Ctrl-Break,
的线程。这就是Thread.activeCount在你的情况下返回2的原因。请注意,此行为是特定于平台的。
你可以使用
Set<Thread> set = Thread.getAllStackTraces().keySet();
获取实时线程并迭代它们以查看有关它们的详细信息,例如
for (Thread thread : set) {
System.out.println(thread.getName() + ", "+ thread.getThreadGroup());
}
答案 2 :(得分:0)
如果你真的想知道所有线程的内容,
public static void logThreadDumps() {
StringBuilder sb = new StringBuilder(32768);
sb.append("============ THREAD DUMP ============\n");
ThreadInfo[] threads = ManagementFactory.getThreadMXBean().dumpAllThreads(true, true);
for (ThreadInfo info : threads) {
sb.append(info);
}
System.out.println(sb.toString()); // or log it
}
答案 3 :(得分:0)
Thread.activeCount();
返回当前线程的线程组及其子组中活动线程数的估计值。递归迭代当前线程的线程组中的所有子组。
The value returned is only an estimate because the number of threads may change dynamically while this method traverses internal data structures, and might be affected by the presence of certain system threads.
访问http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#activeCount()