본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

로그 파일을 주기적으로 청소하기, 데몬 스레드의 구현과 실행

데몬 스레드는 다른 일반스레드의 작업을 돕는 보조적인 역할

일반스레드가 모두 종료되면 데몬 스레드는 강제적으로 종료된다.

데몬스레드의 예로는 가비지 컬렉터, 워드프로세서의 자동저장, 화면자동갱신 등이 있다.

무한루프와 조건문을 이용해서 실행 후 대기하고있다가 특정 조건이 만족되면 작업을 수행하고 다시 대기한다.

일반스레드와 작성, 실행방법이 같으나 실행하기전에 setDaemon을 호출하기만하면된다.

https://standout.tistory.com/1421

 

스레드 구현과 실행 + 싱글쓰레드와 멀티쓰레드: start()와 run()

앞서 스레드에 대해 알아봤다. 프로세스는 공장이라면 스레드는 일꾼이라 생각하면 된다. https://standout.tistory.com/498 프로세스/스레드 방식 프로세스: 공장 스레드: 일꾼 프로세스 방식 매번 새로

standout.tistory.com

https://standout.tistory.com/1424

 

보안상의 이유로 도입된 스레드 그룹: 서로 관련된 스레드를 그룹으로!

스레드 그룹은 서로 관련된 스레드를 그룹으로 다루기 위한 것. 스레드그룹은 보안상의 이유로 도입된 개념 자신이 속한 스레드 그룹이나 하위 스레드 그룹이 아니라면 다른 스레드 그룹의 스

standout.tistory.com

 

 

데몬 스레드의 실용적인 예시 중 하나로 이해해보자.
 로그 파일을 주기적으로 청소하는 백그라운드 작업

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());
                        }
                    }
                }
            }
        }
    }
}