티스토리 뷰

반응형

데몬 스레드

  • 일반 스레드의 작업을 돕는 보조 스레드이다.
  • 일반 스레드가 종료되면 데몬 스레드는 자동으로 종료된다. 이 점을 제외하고는 일반 스레드와 동일하다.
  • 데몬 스레드의 예
    • 가비지 컬렉터, 워드프로세서 자동 저장, 화면자동개신
  • 데몬 스레드는 무한루프를 이용해 항시 대기하고 있다가 특정 조건에 만족하면 작업을 수행하고 다시 대기상태에 있는다.

 

 

데몬 스레드 관련 메소드

boolean isDaemon()    //해당 스레드가 데몬 스레드인지 확인한다.
void setDaemon(boolean on) //파라미터 값이 true이면 스레드를 데몬스레드로 변경한다.
  • setDeamon 메소드는 반드시 start()를 호출하기 전에 실행되어야 한다.
    • 호출 후 실행되면 IllegalTrheadStateException이 발생한다.
public class ThreadEx4 implements Runnable {
    static boolean autoSave = false;

    public static void main(String [] args) {
        Thread t = new  Thread(new ThreadEx4());
        //t.setDaemon(true);    //얘가 없으면 종료되지 않는다.
        t.start();

        for(int i = 1; i < 5; i++) {
            try{
                Thread.sleep(1000);
            } catch(InterruptedException e) {}
            System.out.println(i);

            if(i == 2) {
                autoSave = true;
            }
        }
        System.out.println("시스템 종료");
    }

    public void run() {
        while(true) {
            try {
                Thread.sleep(3000);
            } catch(InterruptedException e) {}
            if(autoSave) {
                autoSave();
            }
        }
    }

    public void autoSave() {
        System.out.println("작업파일이 자동저장되었습니다.");
    }
}

t.setDaemon(true) 사용

  • image

t.setDaemon(true) 사용안함

  • image

즉, 데몬 스레드를 사용하게 되면 일반 스레드(main)가 종료되었을 때 자동으로 데몬 스레드가 종료되기 때문에, 실행결과를 통해 데몬 스레드를 사용할 때와 사용하지 않을 때의 차이를 확인할 수 있다.

 

 

실행중인 모든 호출스택 출력

//getAllStackTraces() 사용
Map map = getAllStackTraces();
Iterator it = map.keySet().iterator();
  • 해당 메소드(getAllStackTraces)를 사용하면 실행 중 또는 대기상태를 호출할 수있다.(작업이 완료되지 않은 모든 스레드의 호출 스택을 확인할 수 있다.)
  • 프로그램을 실행하면 JVM은 가비지 컬렉션, 이벤트처리, 그래픽 처리 등 프로그램이 실행되는데 필요한 보조작업을 수행하는 데몬 스레드를 자동적으로 생성해서 실행시킨다.
  • 그리고 이 들(데몬 스레드)은 Sytem Thread Group or Main Thread Group 에 속한다.
반응형

'Java > Java 기초' 카테고리의 다른 글

[Java 기초] 클래스의 프록시  (0) 2020.03.30
[Java 기초] static과 final의 조합  (2) 2020.03.19
[Java 기초] static  (0) 2020.02.16
[Java 기초] final  (0) 2020.02.15
[Java 기초] public static void main(String [] args)  (0) 2020.02.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함