多实例任务执行
Multi instance task execution
我有任务:
@Scheduled(fixedDelayString = "3000")
public void test() {
System.out.println(Thread.currentThread().getName());
}
我想要这个任务的 3 个实例,我指定了具有 3 个池的 ThreadPoolTaskExecutor,但是我得到了 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());
}
}
我有任务:
@Scheduled(fixedDelayString = "3000")
public void test() {
System.out.println(Thread.currentThread().getName());
}
我想要这个任务的 3 个实例,我指定了具有 3 个池的 ThreadPoolTaskExecutor,但是我得到了 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());
}
}