gpt4 book ai didi

java - 在 for 循环中重用 Thread 对象

转载 作者:行者123 更新时间:2023-11-30 03:53:46 25 4
gpt4 key购买 nike

我目前正在重构一些代码,并且不断发现如下所示的 block :

for (int i = 0; i < NumSortThreads; i++) {
logger.info("Starting sorting thread " + (i) + "/"
+ NumSortThreads + "... ");
sorter = new FooSorter(batchQueue, fooQue, RsaveQueue,
minSamples);
Sorter = new Thread(sorter);
Sorter.start();
}

可以通过这种方式重用线程对象吗?这很重要,因为稍后我要终止线程(使用对象的方法之一),并且我不确定它是否会真正杀死所有生成的线程。

我找不到任何关于此事的文档,但根据我对 Java 的了解,我会假设每次调用 new Thread(obj) 时,它都会杀死前一个线程。这部分是基于这样一个事实:我知道 java 为线程组提供了另一个对象(这可能是原作者想要的)。

此代码是否会产生 NumSortThreads 线程?或者由于重复实例化而只产生一个?

最佳答案

您的代码正在重用变量Sorter,而不是它引用的线程对象。重新分配变量后

Sorter = new Thread(sorter);

它开始引用一个新的线程对象,并停止引用旧的线程。

So if I were to call sorter.terminate() (a method that gets the object to stop processing) would it successfully kill all Sorter threads?

不,因为每个线程对象都在构造函数中为其分配了单独的 FooSorter

sorter = new FooSorter(batchQueue, fooQue, RsaveQueue, minSamples);
Sorter = new Thread(sorter); // <<== each thread gets a new FooSorter

这只会终止最后一个线程。如果您想终止所有线程,则需要将它们放入一个集合中,并以与创建它们相同的方式(即在循环中)调用terminate

关于java - 在 for 循环中重用 Thread 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23765287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com