Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何测试一个线程是否是Java中仅存的线程?_Java_Multithreading_Concurrency - Fatal编程技术网

如何测试一个线程是否是Java中仅存的线程?

如何测试一个线程是否是Java中仅存的线程?,java,multithreading,concurrency,Java,Multithreading,Concurrency,我希望Java程序中的一个线程循环,直到所有其他线程都死掉,然后结束循环。我如何知道循环线程是剩下的唯一线程 在我的情况下,循环线程将不引用任何其他线程,所以我不认为 ISALIVE()>代码>帮助我。 < P>这不是一个你会考虑的情况吗? 如果没有,是否最好维护一个活动线程列表,并在每个线程被销毁时删除它们?这可能有帮助,也可能没有帮助,具体取决于您的用例 将循环线程设置为守护程序模式 setDaemon(true); 如果所有非守护进程线程都消失了,Java将为您杀死它。有您需要的方法。

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


在我的情况下,循环线程将不引用任何其他线程,所以我不认为<代码> ISALIVE()>代码>帮助我。

< P>这不是一个你会考虑

的情况吗?
如果没有,是否最好维护一个活动线程列表,并在每个线程被销毁时删除它们?

这可能有帮助,也可能没有帮助,具体取决于您的用例

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

setDaemon(true); 

如果所有非守护进程线程都消失了,Java将为您杀死它。

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

是否使用Executors和invokeAll作为选项?也就是说,您能否实现可调用的功能


这样做就简单多了。

您可以通过使用ThreadFactory将一些内容整合在一起,只需确保在WeakHashMap中注册所有线程即可

遍历映射以查看哪些线程处于活动状态


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

也许是这样,让我知道这对我有什么帮助。如果您参考的是ThreadPool模式,那么请转到链接并阅读您为什么要使用它……如果您是指数组,那么它是否不明显?您可以在启动每个线程时将其添加到数组中,并在销毁它们时将其删除。因此,您有一个活动线程数组。因此,如果array.count=1,那么您就知道它是最后一个活动线程。好的,我将使用一个列表。我仍然很好奇是否有办法不记账。对不起,我的第一个评论是在我奇怪地没有注意到你的第二句话时发表的。ThreadGroup API有问题。。请参阅Josh Bloch的“有效Java”以获取示例(在Google Books上搜索“threadgroup有效Java”以查看相关页面,URL太长,无法粘贴到此处)。例如,Enumerate方法就不是线程安全的(!)。在本例中,您可能知道有多少线程,因此Bloch描述的数组大小问题可能不会成为问题,但它仍然是一个奇怪的API。您为什么要回答3年前的问题?我不知道2009年我想做什么!:)