Java

[Java의 정석] 13-2. 스레드: 우선순위, 그룹, 데몬 스레드

noahkim_ 2023. 11. 27. 19:01

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다.

 

5. 우선순위

  • Thread 클래스는 우선순위라는 속성을 가지고 있습니다.
  • 우선순위 값에 따라 스레드의 실행순서가 달라집니다.
  • 사용자에게 빠르게 반응해야 하는 작업에 우선순위를 높게 부여합니다.

 

우선순위 지정하기

  • 1~10이며, 숫자가 높을수록 우선순위가 높습니다.
  • 부모 스레드로부터 상속받습니다.

 

6. 스레드 그룹

// 스레드 그룹 생성
ThreadGroup group = new ThreadGroup("CustomGroup");

// 그룹에 속한 스레드 생성
Thread t1 = new Thread(group, () -> {
    System.out.println("Thread 1 is running");
});

Thread t2 = new Thread(group, () -> {
    System.out.println("Thread 2 is running");
});

t1.start();
t2.start();
  • 서로 관련된 스레드를 그룹으로 다루기 위한 것입니다.
  • 모든 스레드는 반드시 스레드 그룹에 포함되어 있어야 합니다.

 

계층적 트리 구조
  • 스레드 그룹에 다른 스레드 그룹을 포함시킬 수 있습니다.

 

Security Manager
  • 보안 상의 이유로 도입되었음
  • 특정 스레드가 시스템에 접근하는 것을 제한할 수 dlT음

 

Root 그룹

Main 그룹

main 스레드
사용자 스레드

 

System 그룹

Finalizer 스레드
  • GC 수행

 

7. 데몬 스레드

public class DaemonThreadExample {
    public static void main(String[] args) {
        // 데몬 스레드 생성
        Thread daemonThread = new Thread(() -> {
            while (true) {
                System.out.println("Daemon thread is running...");
                try {
                    Thread.sleep(1000); // 1초 대기
                } catch (InterruptedException e) {
                    System.out.println("Daemon thread interrupted");
                }
            }
        });

        // 데몬 스레드로 설정
        daemonThread.setDaemon(true);

        // 데몬 스레드 시작
        daemonThread.start();

        // 메인 스레드 3초 실행 후 종료
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Main thread is exiting...");
    }
}

 

보조적인 역할

  • 다른 일반 스레드의 작업을 돕는 스레드
  • GC, Log 기록, 세션 관리

 

일반 스레드와의 관계

  • 일반 스레드가 모두 종료되면 데몬 스레드는 강제적으로 종료됨
  • 무한루프의 조건문을 이용해서 실행 후 대기하고 있다가 특정조건이 만족되면 작업을 수행하고 다시 대기합니다.