如何测试线程是否是Java中唯一剩余的线程?

时间:2009-08-29 10:40:07

标签: java multithreading concurrency

我希望Java程序中的一个线程循环,直到所有其他线程都死掉,然后结束循环。我如何知道我的循环线程何时是剩下的唯一线程?

在我的情况下,循环线程将没有任何其他线程的引用,所以我认为isAlive()不会帮助我。

5 个答案:

答案 0 :(得分:11)

根据您的使用情况,这可能会有所帮助,也可能没有帮助。

将循环线程设置为守护进程模式

setDaemon(true); 

如果所有非守护程序线程都消失了,Java会为你杀死它。

答案 1 :(得分:3)

这不是您考虑Thread Pool Pattern吗?

的情况

如果没有,维护一个活动线程列表,删除每个活动线程会不会更好?

答案 2 :(得分:1)

ThreadGroup拥有您需要的方法。如果你可以在同一个ThreadGroup中创建所有线程,那将是最简单的,但这不是必需的。 Thread.currentThread()。getThreadGroup()将帮助您入门。 ThreadGroup上的枚举方法是如何获取所有线程的列表。

答案 3 :(得分:0)

使用Executors和invokeAll是一个选项吗?即你可以将你的功能实现为Callables吗?

然后这很简单。

答案 4 :(得分:0)

你可以使用ThreadFactory一起破解一些东西,并确保在WeakHashMap中注册所有线程。

遍历地图以查看哪些线程还活着。

另一种可能的方法 - 使用ThreadJMXBean?