gpt4 book ai didi

java - 线程内部的线程完成后重新启动线程

转载 作者:行者123 更新时间:2023-11-30 07:38:54 31 4
gpt4 key购买 nike

我有线程x,我像这样开始:

ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(() -> {

x 内部,我有一个带有另外 10 个线程的 CyclicBarrier:

final CyclicBarrier _threadGate = new CyclicBarrier(10);
ArrayList<Thread> _threadList = new ArrayList<>();

然后我将线程添加到列表中

for (int i = 0; i < 10; i++) {
_threadList.add(new Thread() {
@Override
public void run() {
_threadGate.await();
//long processing code

因此,在线程准备好后,我启动它们,它们同时启动很重要(几乎,循环需要时间,即使是 0.01 毫秒):

for (int i = 0; i < _threadList.size(); i++) {
_threadList.get(i).start();
}

现在,主线程x的结尾是这样的:

}, 0, repeatTimer, TimeUnit.SECONDS);

如果repeatTimer300,这意味着它会在5分钟后再次启动10个线程。

10 个线程完成的时间未知,但不到 5 分钟。肯定是 2 到 4 分钟之间。

我想要实现的目标

一旦 10 个线程完成,重新启动 X,但延迟 5 秒。
为此,我一直在考虑将 repeatTimer 值设置为 10 个线程耗时 + 5 秒(我不知道该怎么做,我不知道最后一个线程何时完成其任务),但这正确吗?或者还有其他方法吗?

最佳答案

我不认为这里有 SchedulingExecutorService 的必要性。您可以使用 CountDownLatch 等待所有线程完成其工作。 。

这是一个简单的例子:

while (!stopped) {
CountDownLatch latch = new CountDownLatch(N);
// create and start your threads
latch.await(); // this method blocks until each Thread calls countDown()
// wait here 5 seconds if you want
}

减少每个线程最后一个操作中的锁存器:

public void run() {
_threadGate.await();
// thread actions
latch.countDown();
}

关于java - 线程内部的线程完成后重新启动线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34963396/

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