데몬 스레드는 다른 일반스레드의 작업을 돕는 보조적인 역할
일반스레드가 모두 종료되면 데몬 스레드는 강제적으로 종료된다.
데몬스레드의 예로는 가비지 컬렉터, 워드프로세서의 자동저장, 화면자동갱신 등이 있다.
무한루프와 조건문을 이용해서 실행 후 대기하고있다가 특정 조건이 만족되면 작업을 수행하고 다시 대기한다.
일반스레드와 작성, 실행방법이 같으나 실행하기전에 setDaemon을 호출하기만하면된다.
https://standout.tistory.com/1421
https://standout.tistory.com/1424
데몬 스레드의 실용적인 예시 중 하나로 이해해보자.
로그 파일을 주기적으로 청소하는 백그라운드 작업
import java.io.File;
public class LogCleanupDaemon {
public static void main(String[] args) {
// 로그 청소 작업을 수행하는 데몬 스레드 생성
Thread cleanupThread = new Thread(() -> {
while (true) {
try {
// 1일 간격으로 로그 파일 청소 작업 수행
cleanLogs();
Thread.sleep(24 * 60 * 60 * 1000); // 1일(24시간) 대기
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
// 데몬 스레드로 설정
cleanupThread.setDaemon(true);
// 데몬 스레드 시작
cleanupThread.start();
// 메인 스레드가 종료되면 프로그램이 종료되므로 여기에는 추가 작업이 없습니다.
// 주 스레드가 종료되면 데몬 스레드도 함께 종료됩니다.
}
private static void cleanLogs() {
// 로그 파일이 저장된 디렉토리
File logDir = new File("logs");
// 디렉토리 내의 모든 파일을 가져와서 삭제
File[] logFiles = logDir.listFiles();
if (logFiles != null) {
for (File file : logFiles) {
if (file.isFile()) {
// 일주일 이전의 로그 파일 삭제
long oneWeekAgo = System.currentTimeMillis() - (7 * 24 * 60 * 60 * 1000);
if (file.lastModified() < oneWeekAgo) {
if (file.delete()) {
System.out.println("Deleted old log file: " + file.getName());
} else {
System.err.println("Failed to delete old log file: " + file.getName());
}
}
}
}
}
}
}
'JAVA' 카테고리의 다른 글
스레드의 스케줄링/실행제어, 스레드의 상태를 지정하다. (0) | 2024.02.26 |
---|---|
getState(), 스레드의 상태 확인하기 (0) | 2024.02.26 |
보안상의 이유로 도입된 스레드 그룹: 서로 관련된 스레드를 그룹으로! (0) | 2024.02.26 |
스레드의 우선순위 setPriority() (0) | 2024.02.19 |
스레드 구현과 실행 + 싱글쓰레드와 멀티쓰레드: start()와 run() (0) | 2024.02.19 |