我希望Java程序中的一个线程循环,直到所有其他线程都死掉,然后结束循环。我如何知道我的循环线程何时是剩下的唯一线程?
在我的情况下,循环线程将没有任何其他线程的引用,所以我认为isAlive()
不会帮助我。
答案 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?