Thread 기본 코드

기본 Thread 실행 코드

import java.util.logging.Logger;

public class Main {
    public static void main(String[] args) {
        Logger logger = Logger.getLogger("MAin Logger");

        //default Thread
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                logger.info("Running...1 Name = " + Thread.currentThread().getName());
                logger.info("Running...1 = Priority " + Thread.currentThread().getPriority());
                throw new RuntimeException("Internal Exception");
            }
        });
        thread.setPriority(Thread.MIN_PRIORITY);
        thread.setName("Error Thread");
//        thread.run(); //Main Thread
        thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                System.out.println("Thread is dead with " + t.getName() + " / " + e.getMessage());
            }
        });

        thread.start(); // new Thread


        //Ramda
        Thread thread2 = new Thread(() -> logger.info("Running...2 = " + Thread.currentThread().getName()) );
        thread2.setPriority(Thread.MAX_PRIORITY);
        thread2.setName("new Name");
        thread2.run(); //Main Thread
        thread2.start(); // new Thread
    }
}

이 코드는 아래와 같은 결과를 만들어 낸다.

5월 24, 2021 4:58:20 오후 Main lambda$main$0
INFO: Running...2 = main
5월 24, 2021 4:58:20 오후 Main$1 run
INFO: Running...1 Name = Error Thread
5월 24, 2021 4:58:20 오후 Main$1 run
INFO: Running...1 = Priority 1
Thread is dead with Error Thread / Internal Exception
5월 24, 2021 4:58:20 오후 Main lambda$main$0
INFO: Running...2 = new Name

 

간단히 중요한 포인트를 보자면 다음과 같다.

thread2.run(); //Main Thread
thread2.start(); // new Thread

Thread Run의 경우 신규 Thread를 생성하지 않고 현 Thread에서 작동 한다.

Start의 경우 신규 Thread를 생성한다.

thread2.setName("new Name");

Child 스레드가 Exception 났을 경우 확인을 위해서 

thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println("Thread is dead with " + t.getName() + " / " + e.getMessage());
}
});

Exception Handler를 설정 가능하다.

Thread의 우선 순위는 

thread.setPriority(Thread.MIN_PRIORITY);

를 통해서 설정 가능 하다.

728x90
반응형