[스레드 풀] ScheduledThreadPool 예외 처리

배경.


어떤 임무류는 추출 데이터의 논리를 정시에 처리하고 정시 스레드 탱크를 통해 실현한다.

문제.


이날 데이터가 처리되지 않은 것을 발견하고 초보적인 검사를 한 결과 스레드 탱크에 넣은 이 임무는 실행되지 않았고 다른 임무는 정상적으로 실행될 수 있었기 때문이라고 포지셔닝했다.

분석하다.


이 작업의 코드 논리를 정리하는데 그 중에서 데이터를 처리하는 과정에서 데이터에 대한 규범에 맞는 검사가 누락되었기 때문에 바로 이번 결여된 데이터 때문에 코드가 이상하게 나왔다.
자료 찾기와 데모 테스트를 통해 4ScheduledThreadPool이 정시 스레드 탱크는 이상한 작업을 던지면 마운트되며, 이후에는 다시 호출되지 않습니다.

해결하다


작업 중 작업에 대한 규정 준수 검사 수행
불가피한 이상을 포획하여 이상이 퀘스트 밖으로 던져지지 않도록 합니다

테스트

public class ScheduledThreadPoolTest {

    public static void main(String[] args) {

        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);

        scheduledExecutorService.scheduleAtFixedRate(() -> System.out.println("A"), 0, 2, TimeUnit.SECONDS);
        
        scheduledExecutorService.scheduleAtFixedRate(() -> {
            System.out.println("B");
            throw new RuntimeException();
        }, 0, 2, TimeUnit.SECONDS);
        
        scheduledExecutorService.scheduleAtFixedRate(() -> System.out.println("C"), 0, 2, TimeUnit.SECONDS);
    }
}

실행 결과
A
B
C
A
C
A
C
...

여기에서 B 퀘스트가 이상을 던진 후 스레드 탱크가 다시 호출되지 않음을 볼 수 있습니다

좋은 웹페이지 즐겨찾기