gpt4 book ai didi

Java-将完成的线程对象分配给新线程

转载 作者:行者123 更新时间:2023-12-01 17:28:35 24 4
gpt4 key购买 nike

好吧,标题的措辞有点奇怪,但我真的不知道如何表达。基本上,根据我对 Java 和线程的理解,你创建一个线程,它运行,然后死亡。但是,线程 OBJECT 仍然存在。我想知道这样的事情是否有效

int numWorkers = Integer.parseInt(args[0]);
int threadPoolSize = Integer.parseInt(args[1]);
ExecutorService tpes = Executors.newFixedThreadPool(threadPoolSize);
WorkerThread[] workers = new WorkerThread[numWorkers];
while(some condition)
for (int i = 0; i < numWorkers; i++) {
workers[i] = new WorkerThread(i, *some changing parameters*);
tpes.execute(workers[i]);
}

基本上这种情况是什么,我们有一些条件,我们不知道什么时候会满足。假设我使用 8 个线程。我创建了所有 8 个线程,它们做自己的事情并返回。我将他们的结果放在一起,意识到我还没有完成。然而,例如,workers[0] 已经存在。我通过 new WorkerThread() 调用创建了它。但它现在已经死了,因为它已经运行完毕了。如果我再次调用workers[0] = new WorkerThread(0, 新参数)...这是允许的吗?我需要更多线程,我已经有一个(现在)死线程数组......我可以将它们指向其他东西吗?旧线程是否被 GC 正确收集?

最佳答案

首先要做的事情是:您不向执行程序服务提交线程。您提交任务,它们只是实现run的对象。 Executor Service 完全控制线程池。

您可以轻松地安排相同的 Runnable 任意次数,每次您都会收到另一个 FutureTask 对象,该对象会告诉您它是否已完成并允许您取消它。这些 FutureTask 对象不可重用,但这没问题。

关于Java-将完成的线程对象分配给新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13111007/

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