Насколько мне известно, невозможно указать один поток. Однако вы можете указать Executor
, который следует использовать для планирования ваших задач. Если вы не хотите, чтобы ваши задачи выполнялись в одном потоке, просто создайте пул потоков с одним потоком в нем, например:
@Configuration
@EnableAsync
@EnableScheduling
public class TempConfig {
@Scheduled(fixedRate = 1000)
@Async(value = "threadPool1")
public void task1() {
System.out.println("Task1: " + Thread.currentThread());
}
@Scheduled(fixedRate = 1000)
@Async(value = "threadPool2")
public void task2() {
System.out.println("Task2: " + Thread.currentThread());
}
@Bean
public Executor threadPool1() {
return Executors.newFixedThreadPool(1);
}
@Bean
public Executor threadPool2() {
return Executors.newFixedThreadPool(1);
}
}
Конечно, вы также можете просто запланировать задачи самостоятельно :
var s1 = Executors.newScheduledThreadPool(1);
var s2 = Executors.newScheduledThreadPool(1);
// schedule tasks of group1
s1.scheduleWithFixedDelay(...);
s1.scheduleWithFixedDelay(...);
// schedule tasks of group2
s2.scheduleWithFixedDelay(...);
s2.scheduleWithFixedDelay(...);