多实例任务执行

Multi instance task execution

我有任务:

@Scheduled(fixedDelayString = "3000")
public void test() {
    System.out.println(Thread.currentThread().getName());
}

我想要这个任务的 3 个实例,我指定了具有 3 个池的 ThreadPoolTask​​Executor,但是我得到了 3 个等待其他任务执行的任务,我如何 运行 它们并行而不等待其他任务?

我现在能想到的唯一解决方案(没有深入研究文档)是将您的任务安排一次并启动三个线程。

首先,您创建一个 ExecutorService executorService = Executors.newFixedThreadPool(3); 并将其作为静态变量。

在您的 @Scheduled 方法中,您通过使用相同的基础方法调用 executor.submit() 3 次来执行 3 次处理(您在单独的方法中提取实际处理部分)。

一个好方法是使用 sprint async

@EnableAsync
public class ScheduledFixedRateExample {
    @Async
    @Scheduled(fixedDelayString = 3000)
    public void test() throws InterruptedException {
        System.out.println(Thread.currentThread().getName());
    }

}