본문 바로가기
스터디/혼공학습단 10기 - 자바 & 머신러닝

[혼공학습단] 데몬 스레드, 손코딩으로 익혀보자

by 찌노오 2023. 7. 24.

 

 

 

 

기본미션

주차 진도 기본 미션
4주차 Chapter 12 p.550 [직접 해보는 손코딩]
코딩 과정 및 실행 결과 캡처하기

 

데몬스레드(daemon Thread)

정의

데몬 스레드는 일반 스레드와는 다른 특별한 종류의 스레드이다.

일반 스레드와는 달리 주 스레드의 작업이 모두 종료되면 데몬 스레드는 자동으로 종료되는 특징을 가지고 있다. 즉, 데몬 스레드는 프로그램이 실행되는 동안 백그라운드에서 특정 작업을 처리하거나 다른 스레드들을 돕는 보조적인 역할을 수행한다.

 

이러한 특성 때문에 데몬 스레드는 보통 백그라운드 작업에 사용되며, 주로 시스템 리소스를 주시하거나 주기적으로 정리하는 등의 역할을 한다.

데몬 스레드를 생성하는 방법

자바에서 데몬 스레드를 생성하는 방법은 간단합니다. 스레드를 생성하고 setDaemon(true) 메서드를 호출하여 해당 스레드를 데몬 스레드로 설정하면 된다.

 

단, setDaemon(true) 메서드는 반드시 start() 메서드를 호출하기 전에 실행되어야 하는데 그렇지 않으 IllegalThreadStateException이 발생한다. 스레드가 이미 시작되었기 때문에 속성을 변경할 수 없기 때문이다.

 

책의 예제로 쓸, AutoSaveThread라는 데몬 스레드를 생성하고 실행하는 방법은 다음과 같다.

class AutoSaveThread extends Thread {
    public void run() {
        while (true) {
            // 데몬 스레드로 수행할 작업 구현
        }
    }
}

public static void main(String[] args) {
    AutoSaveThread daemonThread = new AutoSaveThread();
    daemonThread.setDaemon(true); // 데몬 스레드로 설정
    daemonThread.start(); // 스레드 시작

    // 여기서 일반 스레드들을 생성하고 실행하면 데몬 스레드는 백그라운드에서 실행됨
}

 

데몬 스레드 주의사항

주 스레드가 종료되면 강제로 종료된다는 특성을 가진 만큼, 자원 정리동기화 중요하다.

파일을 열거나 작업하는 데몬스레드를 만들었다면 작업후 파일을 잘 닫아둔다든지, 여러 스레드에서 공유변수에 접근하는 경우 동기화하여 데이터의 일관성을 유지 해야 한다.

 이 부분은 이론으로만 배우고 있어 아직은 와닿지는 않아서, 직접 해봐야 좀 더 이해가 쉬울 것 같다.

 

 

손코딩 실습하기

 

1초 주기로 save() 메소드를 호출하는 데몬 스레드

(Web Complier로 실습했는데 1초 주기로 잡으니, 작업 내용을 저장함 호출이 3번 이루어지지 않아서 sleep 메서드에 1000이 아닌 999를 넣었다. 원인은 아직 모르겠다.)

 

메인스레드가 실행하는 코드

 

실행결과

메인 스레드는 3초 후 종료되고, 데몬 스레드는 이에 맞춰 종료되어 호출이 더 이상 이루어지지 않는 모습이다. 

 

 

 

 

 

 

** 사실과 다른 내용이 있을 수 있습니다. 언제든지 피드백 부탁드립니다!

반응형

댓글