본문 바로가기

scheduledExecutorService

(2)
ScheduledThreadPoolExecutor에서 주의할 점. (ThreadPool의 배신, 동작 방법을 알지 못하고 쓴 사람의 삽질) ThreadPool을 조심해라? 이 글을 쓰게 된 이유는 나의 안일함 때문이었다. 주기적으로 장비의 데이터를 수집하고 메세지를 만들어서 상위 시스템으로 데이터를 전송해야 하는 업무를 하고 있어서 ScheduledThreadPoolExecutor를 사용하게 되었다. 이미 13개월전에 Timer를 비롯해서 정확한 주기로 작업을 실행해주는 것이라며 자랑스럽게(?) 올린 포스트가 있다. 그런데 ThreadPool 단어에 낚여 오해한 채 사용하고 있었다. 그래서 그 문제를 주의하고 정리하는 차원에서 글을 작성한다. ThreadPool하면 떠오는 것 자주 보이는 것 중 생각나는 것은 DBCP나 WAS의 ThreadPool이 떠오른다. 간단하게 설명하면, 각각의 Request에 대해서 각각의 쓰레드를 생성해서 수행하..
자바 쓰레드를 거의 정확한 주기로 실행하는 방법!(로직 수행 시간에 관계없이 정확한 주기 만들기,Timer, ScheduledExecutorService) 자바 쓰레드를 거의 정확한 주기로 실행하는 방법 (사족) "정확한 주기"로 실행하는 방법을 쓰게된 이유는 거의 비슷할 것이다.어떤 애플리케이션을 개발할 때 백그라운드에서 일정 주기마다 어떤 값을 검사하거나 보내는 등의 특정 로직을 수행하는 기능(쓰레드)이 필요하기 때문이다.나 역시도 데이터를 짧은 주기마다 보내야하는 로직이 필요했다.그래서 쓰레드의 주기하면 단순하게 떠오르는 것이 Thread.sleep() 메소드였다. - sleep()으로 될까?단순하게 쓰레드의 run() 메소드에 sleep(1000);을 적어서 1초쉬고 해당로직을 수행하게 했다.시간(주기)이 애플리케이션에서 치명적이지 않다면 간단하면서 쉬운 방법이다.하지만 시간이 정확해야하는 애플리케이션에서는 로직 수행시간이 추가되면서 지속적인 오차 ..