首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ScheduledExecutorService:如何等待所有任务完成,然后执行更多任务

ScheduledExecutorService是Java中的一个接口,它是用于在指定的时间间隔内执行任务的线程池。它可以用于定时执行任务,或者按照固定的时间间隔周期性地执行任务。

要等待所有任务完成后执行更多任务,可以使用CountDownLatch来实现。CountDownLatch是Java中的一个同步辅助类,它可以让一个或多个线程等待其他线程完成操作。

下面是一个示例代码,演示如何使用ScheduledExecutorService和CountDownLatch来等待所有任务完成后执行更多任务:

代码语言:txt
复制
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

请注意,以上答案仅供参考,具体的解决方案可能因实际需求而异。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券