gpt4 book ai didi

java - 无法预测所有线程何时完成执行

转载 作者:行者123 更新时间:2023-12-01 09:36:46 25 4
gpt4 key购买 nike

这是我的代码

package pe.entel.ftp;

public class Myclass implements Runnable {
public void run() {
System.out.println(Thread.currentThread().getName());
}
public static void main(String[] args) {
Myclass runnable = new Myclass();
ThreadGroup tg1 = new ThreadGroup("Parent ThreadGroup");

for (int i = 0; i < 100; i++) {
Thread t1 = new Thread(tg1, runnable, i + "");
t1.start();
System.out.println("Thread Group Name: " + tg1.getName());

}
while (tg1.isDestroyed()) {
System.out.println("yes success");
}

System.out.println("completed");

}
}

而我的o/p部分是

  Thread Group Name: Parent ThreadGroup
Thread Group Name: Parent ThreadGroup
Thread Group Name: Parent ThreadGroup
Thread Group Name: Parent ThreadGroup
Thread Group Name: Parent ThreadGroup
completed
84
86
88
90
92
94
96
98
95
97
99

这里我无法预测线程组何时完成执行。甚至,用于检查线程组是否被销毁的 while 循环也不起作用。即使在打印完成后,一些线程仍在执行。

最佳答案

ThreadGroup 未完成执行。如果你想等待所有线程完成,你必须收集它们并等待所有线程:

List<Thread> allThreads = new ArrayList<>();

for (int i = 0; i < 100; i++) {
Thread t1 = new Thread(tg1, runnable, i + "");
t1.start();
allThreads.add(t1);
}

allThreads.forEach(Thread::join);

ThreadGroup 的存在时间比它们包含的线程还要长,您可能希望在到目前为止的所有线程都完成后向 ThreadGroup 添加新线程。它们只是对线程进行分组,而不是控制它们。

关于java - 无法预测所有线程何时完成执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38828780/

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