ScheduledExecutorService是Java中的一个接口,它是用于在指定的时间间隔内执行任务的线程池。它可以用于定时执行任务,或者按照固定的时间间隔周期性地执行任务。
要等待所有任务完成后执行更多任务,可以使用CountDownLatch来实现。CountDownLatch是Java中的一个同步辅助类,它可以让一个或多个线程等待其他线程完成操作。
下面是一个示例代码,演示如何使用ScheduledExecutorService和CountDownLatch来等待所有任务完成后执行更多任务:
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Example {
public static void main(String[] args) throws InterruptedException {
int taskCount = 5; // 任务数量
CountDownLatch latch = new CountDownLatch(taskCount); // 创建CountDownLatch,初始计数为任务数量
ScheduledExecutorService executor = Executors.newScheduledThreadPool(taskCount); // 创建ScheduledExecutorService
// 提交任务
for (int i = 0; i < taskCount; i++) {
executor.schedule(new Task(latch), i, TimeUnit.SECONDS);
}
latch.await(); // 等待所有任务完成
// 执行更多任务
System.out.println("All tasks completed. Do more tasks...");
executor.shutdown(); // 关闭ScheduledExecutorService
}
static class Task implements Runnable {
private CountDownLatch latch;
public Task(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
try {
// 模拟任务执行
Thread.sleep(1000);
System.out.println("Task completed");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
latch.countDown(); // 任务完成,计数减一
}
}
}
}
在上面的示例中,首先创建了一个CountDownLatch对象,并将其初始计数设置为任务数量。然后创建了一个ScheduledExecutorService,并使用schedule方法提交了多个任务,每个任务都会在指定的延迟时间后执行。每个任务执行完成后,会调用CountDownLatch的countDown方法,将计数减一。在主线程中,调用latch.await()方法等待所有任务完成。当所有任务完成后,会输出"All tasks completed. Do more tasks...",然后可以执行更多任务。最后,调用executor.shutdown()方法关闭ScheduledExecutorService。
这里推荐腾讯云的云服务器CVM产品,它提供了弹性计算能力,可以满足各种规模的应用需求。您可以通过以下链接了解更多关于腾讯云服务器CVM的信息:腾讯云服务器CVM
请注意,以上答案仅供参考,具体的解决方案可能因实际需求而异。
领取专属 10元无门槛券
手把手带您无忧上云