안녕하세요, 20년차 자바 개발자 코딩하는곰입니다. 오늘은 자바에서 ScheduledExecutorService를 활용해 알람 기능을 구현하는 방법을 상세히 알아보겠습니다. 스케줄링은 실제 애플리케이션 개발에서 매우 중요한 요소인데요, 이 포스팅을 통해 제가 현업에서 쌓은 노하우를 여러분과 공유하겠습니다. 초보자도 쉽게 이해할 수 있도록 기본 개념부터 실제 구현까지 단계별로 설명드리겠습니다.
ScheduledExecutorService는 자바 5부터 도입된 java.util.concurrent 패키지의 핵심 인터페이스로, 스레드 풀 기반의 스케줄링 기능을 제공합니다. 기존 Timer 클래스보다 더 유연하고 안정적인 특징을 가지고 있습니다. 주요 특징:
import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class BasicScheduler {public static void main(String[] args) {ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);// 1초 후 실행, 이후 2초마다 반복scheduler.scheduleAtFixedRate(() -> System.out.println("알람 실행!"),1, 2, TimeUnit.SECONDS);}}
이제 본격적으로 알람 기능을 구현해보겠습니다. 사용자가 설정한 시간에 알람을 울리는 기능을 만들어 보죠.
import java.time.LocalTime;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class AlarmApplication {private static final ScheduledExecutorService scheduler =Executors.newScheduledThreadPool(2);public static void setAlarm(LocalTime alarmTime, Runnable alarmTask) {long delay = calculateDelay(alarmTime);scheduler.schedule(alarmTask, delay, TimeUnit.MILLISECONDS);}private static long calculateDelay(LocalTime alarmTime) {LocalTime now = LocalTime.now();long nowMillis = now.toNanoOfDay() / 1_000_000;long alarmMillis = alarmTime.toNanoOfDay() / 1_000_000;return alarmMillis > nowMillis ?alarmMillis - nowMillis :alarmMillis + (24 * 60 * 60 * 1000) - nowMillis;}public static void main(String[] args) {setAlarm(LocalTime.of(14, 30),() -> System.out.println("일어날 시간입니다!"));}}
두뇌 활성화와 집중력 향상을 위한 게임이 필요하다면, 편안한 분위기의 스도쿠 저니: 크립토 할아버지가 도움이 될 것입니다.
// 안전한 종료 예제Runtime.getRuntime().addShutdownHook(new Thread(() -> {scheduler.shutdown();try {if (!scheduler.awaitTermination(5, TimeUnit.SECONDS)) {scheduler.shutdownNow();}} catch (InterruptedException e) {scheduler.shutdownNow();}}));
유튜브, 블로그, 커뮤니티용 닉네임을 쉽게 만들고 싶다면 이력 확인 및 카테고리 설정이 가능한 닉네임 생성기를 추천합니다.
오늘은 자바의 ScheduledExecutorService를 활용해 알람 기능을 구현하는 방법을 알아보았습니다. 이 기술은 알람 외에도 정기적인 데이터 백업, 주기적인 캐시 갱신 등 다양한 용도로 활용할 수 있습니다. 실제 프로젝트에서 적용하실 때는 꼭 리소스 정리와 예외 처리에 유의하시기 바랍니다. 질문이 있으시면 댓글로 남겨주세요. 다음 시간에는 더 흥미로운 자바 주제로 찾아뵙겠습니다. 코딩하는곰이었습니다!
📅 다양한 문화행사를 한눈에 보고 싶다면, 섬 민어축제를 참고해보세요.
