Thread
🧵 Thread란?
정의
Thread는 프로세스 안에서 실제 작업을 수행하는 실행 흐름의 단위이다. 하나의 프로세스 안에서 여러 작업을 동시에 처리할 수 있게 해준다.
✅ Thread 종류
Non-Daemon Thread
- 일반적인 작업을 수행하는 스레드다.
- 이 스레드가 남아 있으면 JVM은 종료되지 않는다.
Daemon Thread
- 백그라운드 보조 작업을 수행하는 스레드다.
- 모든 Non-Daemon Thread가 종료되면 함께 종료된다.
포인트
Thread를 이해할 때는 실제 일을 하는 스레드와 보조 역할 스레드를 구분하면 좋다.
✅ Thread 생명주기 (LifeCycle)

주요 상태
- NEW: 스레드 객체가 생성된 상태
- RUNNABLE: 실행 가능한 상태
- BLOCKED: 락을 기다리는 상태
- WAITING: 다른 스레드를 기다리는 상태
- TIMED_WAITING: 일정 시간 동안 대기하는 상태
- TERMINATED: 실행이 끝난 상태
✅ Thread 상태 요약
| 상태 | 설명 |
|---|---|
| NEW | new Thread()로 생성만 된 상태 |
| RUNNABLE | 실행 대기 또는 실행 중인 상태 |
| BLOCKED | monitor lock을 기다리는 상태 |
| WAITING | 다른 스레드의 신호를 기다리는 상태 |
| TIMED_WAITING | 시간 제한이 있는 대기 상태 |
| TERMINATED | 작업이 끝난 상태 |
✅ Thread 우선순위
- 스레드에는 우선순위를 줄 수 있다.
- 숫자가 높다고 반드시 먼저 실행되는 것은 아니다.
- 운영체제 스케줄러와 JVM 정책의 영향을 받는다.
Thread thread = new Thread(() -> {
System.out.println("작업 수행");
});
thread.setPriority(Thread.MAX_PRIORITY);
thread.start();
정리
우선순위는 힌트에 가깝고, 절대적인 실행 순서를 보장하지 않는다.
✅ Thread 사용 시 주의사항
- 공유 자원 접근 시 동기화를 고려한다.
- 경합 상태와 교착 상태를 주의한다.
- 너무 많은 스레드는 오히려 성능을 떨어뜨릴 수 있다.
- 필요한 경우
ThreadPoolExecutor또는 Spring@Async를 활용한다.
🛠️ 기본 생성 예시
Thread thread = new Thread(() -> {
System.out.println("별도 스레드에서 실행");
});
thread.start();
🧩 join 예시
Thread thread = new Thread(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
thread.start();
thread.join();
System.out.println("스레드 종료 후 실행");
⚠️ 주의할 점
- 공유 데이터는 반드시 안전하게 다뤄야 한다.
sleep()과wait()의 차이를 이해해야 한다.- 락을 오래 잡고 있으면 성능이 떨어질 수 있다.
- 무분별한 스레드 생성은 자원 낭비가 될 수 있다.
[!important] 정리 Thread는 프로세스 내부의 실행 흐름이며, 멀티스레드 환경에서는 상태와 동기화를 함께 이해해야 한다.
댓글남기기