자바 스케줄러를 이용해 아래의 코드를 작성했다.
원하는 결과는 test1이 Thread.sleep으로 10초간 멈춰 있을 때, test2 메소드는 10번 실행되는 것이었다.
@Scheduled(fixedDelay = 1000)
public void test1() throws InterruptedException {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() + " (test1) ::: " + LocalDate.now());
}
@Scheduled(fixedDelay = 1000)
public void test2() throws InterruptedException {
System.out.println(Thread.currentThread().getName() + " (test2) ::: " + LocalDate.now());
}
그러나, 결과는 하기 사진과 같았다.
TEST1 메소드와 TEST2의 메소드는 동일한 스레드를 사용하였기 때문에 원하는 결과가 나오지 않았다.

해결 방법으로 config 파일에 ThreadPoolTaskScheduler을 이용해서 Pool 사이즈를 코어 개수로 set해주는 것이다!
코드는 아래와 같다.
@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
int n = Runtime.getRuntime().availableProcessors(); //코어 개수
//ThreadPool: 여러 개의 스레드를 유지/관리
threadPoolTaskScheduler.setPoolSize(n);
threadPoolTaskScheduler.initialize();
taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
}
}
'java' 카테고리의 다른 글
| [java] 커스텀해서 추상화된 예외처리 하기 (0) | 2023.08.17 |
|---|---|
| [java] 2차원 배열의 정렬 방법(오류_i cannot be cast to java.lang.comparable) (0) | 2023.06.06 |
| [java] java로 html 파일 생성하기(feat.자바의 환경 설정 정보 불러오기) (0) | 2023.06.06 |