ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - Deamon Thread, Thread Group
    Java 2018. 1. 31. 13:14
    반응형
    < DeamonThread >

    // deamon thread는 main thread작업을 돕는 보조적인 역할을 수행 한다.
    // Work Thread와 마찬가지로 main thread에 의해서 생성 된다
    // 다만 life cycle의 차이가 있다.

    // deamon thread는 main thread가 끝날때 같이 끝난다.
    // Work thread는 작업이 다 끝나야 thread가 끝난다.


    public class DeamonThread extends Thread {

        @Override
        public void run() {
            
            while(true) {
                try {
                    Thread.sleep(500);
                    System.out.println("Thread Working...");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            
        }

    }



    public class Main {

        public static void main(String[] args) throws InterruptedException {
            
            DeamonThread deamon = new DeamonThread();
            deamon.setDaemon(true); // Deamon Thread로 변경
            deamon.start();
            
            Thread.sleep(3000);
            System.out.println("Main Thread 종료");
            // 데몬 스레드는 메인 스레드가 종료될 때 같이 종료된다.
        }

    }







    < Thread Group >

    // Thread는 name을 통해 관리를 한다.
    // 하지만 Thread 수가 너무 많을 경우 Group을 통해 관리할 수 있다.
    // Thread는 자동적으로 Group을 가지고 있다.
    // 기본 Group는 Main Group 이다.

    // 단체 명령을 내릴 수 있다.
    // 대표적으로 interrupt()를 통해 해당 Group의 Thread를 모두 정지 시킬 수 있다.
    // 이 외에도 Thread Group을 사용 할 수 있는 메서드들이 있다.


    public class WorkThread extends Thread {

        public WorkThread(ThreadGroup group, String name) {
            super(group, name);
        }
        
        @Override
        public void run() {
            ThreadGroup group = Thread.currentThread().getThreadGroup();
            System.out.println("현재 그룹 이름 : "+group.getName());
            System.out.println("현재 스레드 이름 : "+getName());
            
            // 스레드 그룹의 정보를 알려 준다 - 단순 디버깅용
            group.list(); // 이름, 그룹, 우선순위 등
            
            
    //      try {
    //          while(true) {
    //              System.out.println(getName()+" 실행 중...");
    //              Thread.sleep(500);
    //          }
    //      } catch (InterruptedException e) {
    //          System.out.println("interrupt로 인한 종료");
    //      }
            
            while(true) {
                System.out.println(getName()+" 실행 중...");
                if(Thread.interrupted()) {
                    break;
                }
            }
            
            System.out.println(getName()+" 종료");
            
        }
        
    }





    public class Main {

        public static void main(String[] args) {
            
            // 현재 스레드 그룹 이름 알아 보기
            String name = Thread.currentThread().getThreadGroup().getName();
            System.out.println("현재 그룹 이름 : "+name);
            
            // 스레드 그룹 생성 - 그룹은 기본이 메인이다.
            ThreadGroup group = new ThreadGroup("MyGroup");
            
            // 스레드를 생성해서 그룹에 등록
            Thread thA = new WorkThread(group, "A");
            Thread thB = new WorkThread(group, "B");
            
            thA.start();
            thB.start();


    Thread.sleep(3000);
            
    group.interrupt(); // 그룹 단체로 종료
            
        }

    }






    반응형

    'Java' 카테고리의 다른 글

    Mac에서 이클립스로 C언어 프로그래밍하기  (0) 2018.02.01
    Java - Thread Pool, Thread Pool Blocking  (0) 2018.01.31
    Java - Stop, Interrupt  (0) 2018.01.31
    Java - Wait, Notify  (0) 2018.01.31
    Java - Thread  (0) 2018.01.30

    댓글

Designed by Tistory.