울음참고 개발공부
article thumbnail
728x90

 

 

데몬 스레드(Demon thread) 

 

  • 컴퓨터 프로세스 내의 백그라운드에서 싱행되는 스레드
  • 주로 백그라운드 작업을 처리하거나 다른 스레드들을 돕는 역할
  • 데몬 스레드는 일반 스레드와 다르게, 해당 프로세스의 모든 일반 스레드가 종료되면 자동적으로 종료됨
  • 시스템 리소스를 관리하거나 백그라운드에서 주기적으로 실행되어 작업을 처리함
    • 예 ) 웹 서버는 메인 스레드에서 클라이언트 요청을 처리하는 동안 데몬 스레드가 로그 파일을 유지하거나 쓰레기 수집과 같은 자동화된 작업을 처리하는데 사용됨
  • 데몬 스레드는 일반 스레드의 보조적인 역할을 하며, 일반 스레드들이 작업을 마친 후에도 백그라운드에서 동작하는데 사용됨
  • 언어나 프레임워크에 따라 데몬 스레드를 생성하는 방법이 다를 수 있으며, 대부분의 프로그래밍 언어와 스레드 지원 라이브러리는 데몬 스레드를 지원

 

 

 

[ 데몬 스레드를 생성하는 예시 ]

 

public class DaemonThreadExample {
    public static void main(String[] args) {
        // 데몬 스레드로 동작하는 스레드 객체 생성
        Thread daemonThread = new Thread(() -> {
            while (true) {
                System.out.println("데몬 스레드가 실행 중입니다.");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

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

        // 메인 스레드의 실행 작업 (메인 스레드가 먼저 종료되지 않도록 충분한 시간을 주어야 합니다.)
        try {
            Thread.sleep(5000); // 5초 동안 메인 스레드 실행
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("메인 스레드 종료");
    }
}

 

 

 

 


 

 

스레드를 만드는 방법 

 

 

 

Java 에서는 'java.lang.Thread' 클래스를 사용하여 스레드를 생성하는데 두 가지 방법으로 만들 수 있다.

 

 

 

'Thread' 클래스 상속 방법

 

스레드를 생성하기 위해서는 'Thread' 클래스를 상속하고 'run()' 메서드를 오버라이딩한다.

public class MyThread extends Thread {
    @Override
    public void run() {
        // 스레드가 실행할 작업 내용
    }
}

 

이렇게 만든 'MyThread' 클래스의 객체를 생성하고 start() 메서드를 호출하여 스레드를 실행한다

MyThread myThread = new MyThread();
myThread.start();

 

start() 메서드는 스레드의 run() 메서드를 실행시키고, 스레드가 별도로 실행된다

* run() 메서드를 직접 호출하면 단순한 메서드 호출로 실행되며, 스레드로서의 동작이 아님 

 

 

 

 

'Runnable' 인터페이스 구현 방법

 

Java는 단일 상속만을 지원하기 때문에 이미 다른 클래스를 상속한 경우 'Tread' 클래스를 상속하는 방법은 불가능할 수 있기 때문에 'Runnable' 인터페이스를 구현하는 방법을 사용한다

 

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 스레드가 실행할 작업 내용
    }
}

 

 

이렇게 만든 'MyRunnable' 클래스의 객체를 생성하고 'Tread' 클래스의 생성자에 전달하여 스레드를 생성한다

MyRunnable myRunnable = new MyRunnable();
Thread myThread = new Thread(myRunnable);
myThread.start();

마찬가지로 'start()' 메서드를 호출하여 스레드를 생성한다 

 

 

 


이 두 가지 방법 모두 스레드를 생성할 수 있는 방법이지만, Runnable 인터페이스 구현 방법이 더 선호되는 경우가 많습니다. 이는 자바에서는 다중 상속을 지원하지 않기 때문에, 이미 다른 클래스를 상속한 상태에서 스레드 기능을 추가해야 할 때 Runnable 인터페이스를 사용하는 것이 유연성을 높이기 때문입니다.

스레드를 실행시킨 후에는 run() 메서드 안에 스레드가 실제로 처리해야 할 작업 내용을 작성하면 됩니다. 스레드가 해당 작업을 모두 수행하면 run() 메서드가 종료되고, 스레드도 함께 종료됩니다.
또한, 스레드의 실행은 start() 메서드를 호출하여야 하며, 스레드가 종료될 때까지 기다려야 할 경우에는 join() 메서드를 사용하여 기다릴 수 있습니다. 이러한 메서드들은 InterruptedException 예외를 처리해야 할 수도 있으므로 예외 처리에 주의해야 합니다.

 

 

 

728x90
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!