使用ScheduledExecutorService方法定期运行一批任务

问题描述 投票:0回答:1

我想一次提交一批任务,并定期执行它们。使用ExecutorService对象和invokeall方法可以立即运行任务。但是尝试使用scheduleAtFixedRate,它不兼容:

executor.scheduleAtFixedRate(executor.invokeAll(callables), initialDelay, period, TimeUnit.SECONDS );

如何定期执行一批任务?

java multithreading executorservice scheduledexecutorservice
1个回答
1
投票

没有像invokeall那样的东西,但是通过你的runnables循环是没有错的,因为在现实中也没有像“一下子”那样:

ScheduledExecutorService pool = Executors.newScheduledThreadPool(10);
for (int i = 0; i < 10; i++) {
    pool.scheduleAtFixedRate(() -> {
        // do some work
    }, 0, 10, TimeUnit.SECONDS);
}

或者,如果你有一个Runnable的集合:

ScheduledExecutorService pool = Executors.newScheduledThreadPool(runnables.size());
runnables.forEach((r) -> pool.scheduleAtFixedRate(r, 0, 10, TimeUnit.SECONDS));
© www.soinside.com 2019 - 2024. All rights reserved.