【发布时间】:2020-03-17 13:13:10
【问题描述】:
有没有办法同时加入一组线程整体超时?
假设我们有Collection<Thread> threads; 和int timeout;。如果我不在乎超时,我会这样做
for (Thread t : threads)
t.join();
但我想等到所有线程都完成,或经过一定时间,以先到者为准。我正在寻找一个(假设的)ThreadGroup.join(int) 可以做到这一点。
请注意,我要求的与做的不同
for (Thread t : threads)
t.join(timeout);
相反,我正在寻找比
更简洁(也许更可靠)的东西int timeout = 10000;
for (Thread t : threads) {
if (timeout <= 0) break;
long start = System.currentTimeMillis();
t.join(timeout);
long end = System.currentTimeMillis();
// substract time elapsed from next timeout:
timeout -= (int) (end - start);
}
【问题讨论】:
-
是否需要直接使用
Thread对象?如果没有,您可以使用ExecutorService并使用需要超时的invokeAll()。
标签: java multithreading threadgroup