Thread 클래스와 Runnable 인터페이스
- Thread 클래스
- Runnable 인터페이스를 구현하고 있으며, 스레드 실행 흐름 제어 및 관련 메서드 제공
- 주요 메서드
- 스레드 시작 (start())
- 스레드 일시 중지 (sleep())
- 스레드 종료 (interrupt())
- 스레드 이름 설정 (setName())
- 스레드 우선순위 관리 (setPriority())
- Runnable 인터페이스
- 스레드에서 실행할 작업을 정의하기 위한 인터페이스
- 단 하나의 메서드인 run() 포함
스레드 생성 예제
Java에서 스레드 생성 후 .start() 실행 시, JVM이 새 스레드를 생성해 운영체제에게 전달한다.
아래 예제 코드에서 스레드 생성, 이름/우선순위 설정, 병렬 실행 확인을 위한 테스트를 진행했다.
package thread.creation.example;
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> { // 스레드 생성 및 실행할 코드 정의
System.out.println("We are now in thread " + Thread.currentThread().getName());
System.out.println("Current thread priority is " + Thread.currentThread().getPriority());
});
// 스레드 이름 설정
thread.setName("New Worker Thread");
// 스레드 우선순위 설정 (10 : 최우선)
thread.setPriority(Thread.MAX_PRIORITY);
// 신규 스레드 실행 전 메인 스레드에서 실행 중인 스레드 정보 출력
System.out.println("We are in thread: " + Thread.currentThread().getName() + " before starting a new thread");
// 새 스레드 시작
thread.start();
// 신규 스레드 실행 후 메인 스레드에서 실행 중인 스레드 정보 출력
System.out.println("We are in thread: " + Thread.currentThread().getName() + " after starting a new thread");
// 메인 스레드 10초 대기
Thread.sleep(10000);
/*
* 실행 결과(Console)
* We are in thread: main before starting a new thread
* We are in thread: main after starting a new thread
* We are now in thread New Worker Thread
* Current thread priority is 10
*/
}
}
스레드 예외 처리
스레드에서는 스레드와 관련된 예외를 감지하지 못할 경우, Uncaught Exception Handler를 사용해 스레드 내부 예외를 효율적으로 처리할 수 있다.
package thread.exception.example;
public class Main {
public static void main(String[] args) {
Thread thread = new Thread(() -> { // 스레드 생성 및 실행할 코드 정의
throw new RuntimeException("Intentional Exception");
});
// 스레드 이름 설정
thread.setName("Misbehaving thread");
// 스레드에서 발생한 예외를 처리하기 위한 핸들러 설정
thread.setUncaughtExceptionHandler((t, e) -> System.out.println("A Critical error happened in thread " + t.getName() + " the error is " + e.getMessage()));
// 스레드 시작
thread.start();
/*
* 실행 결과(Console)
* A Critical error happened in thread Misbehaving thread the error is Intentional Exception
*/
}
}
'Java & Spring Boot' 카테고리의 다른 글
[Java] 스레드 구성 방식 (0) | 2024.11.24 |
---|---|
[Java] 멀티스레딩 연습 - 금고, 해커, 경찰 게임 구현 (0) | 2024.11.24 |
[Java] Multithreading 기본 개념 - 응답 속도 & 성능 향상 이해하기 (0) | 2024.11.23 |
[Spring Boot] JWT(Access Token, Refresh Token) RTR 구현 (0) | 2024.11.02 |
[Spring Boot] 다중 데이터베이스 + JPA 환경에서의 트랜잭션 관리에 대하여 (0) | 2024.05.08 |