写多线程的时候,想要等main中其他线程都执行完成后(其他线程功能为对一个数字inc+1),输出最终的inc值。
于是写了个循环:
while (Thread.activeCount() > 1) {
System.out.println(Thread.activeCount());
Thread.yield();
}
System.out.println(test.inc);
结果进入了死循环
于是,main中只写已下代码:
System.out.println(Thread.activeCount()); // 结果为2
原因如下:
// 获取java线程的管理MXBean
ThreadMXBean tmxb = ManagementFactory.getThreadMXBean();
// 不需要获取同步的Monitor和synchronizer信息,仅获取线程和线程堆栈信息
ThreadInfo[] threadInfos = tmxb.dumpAllThreads(false, false);
// 遍历线程信息,打印出ID和名称
for (ThreadInfo info : threadInfos) {
System.out.println("[" + info.getThreadId() + "] " + info.getThreadName());
}
[6] Monitor Ctrl-Break
[5] Attach Listener
[4] Signal Dispatcher
[3] Finalizer
[2] Reference Handler
[1] main
System.out.println(Thread.activeCount());
Thread.currentThread().getThreadGroup().list();
2
java.lang.ThreadGroup[name=main,maxpri=10]
Thread[main,5,main]
Thread[Monitor Ctrl-Break,5,main]
可以发现当前线程组包含:main和Monitor Ctrl-Break
所有多线程测试代码如下: