[이것이 자바다] 13. 스레드
안녕하세요. 이번에는 자바의 스레드에 대해 정리한 내용입니다.
스레드는 개념 자체가 워낙 저한테는 와닿지가 않았어서 저도 정리하는데 좀 힘들었어요. 정리본도 아마 좀 다른파트보다 부실할것 같습니다. 그래도 기초적인 이해는 잘 할수있도록 정리해봤습니다.
1. 스레드(Thread) 기본
- 프로세스(Process): 실행 중인 하나의 애플리케이션입니다.
- 스레드(Thread): 프로세스 내에서 작업을 수행하는 실행 흐름의 최소 단위입니다.
- 멀티 스레드(Multi-Thread)
- 하나의 프로세스 내에서 여러 개의 스레드를 만들어 여러 작업을 동시에 처리하는 기술입니다.
- 프로그램의 응답성을 높이고 자원을 효율적으로 사용 가능합니다.
스레드 생성 방법
Runnable인터페이스 구현 (추천)- 다중 상속이 불가능하므로, 인터페이스를 구현하는 것이 유연성과 재사용성 면에서 좋습니다.
run()메소드 안에 작업 내용을 작성합니다.new Thread(구현객체)생성자에 전달하여 생성합니다.
Thread클래스 상속Thread클래스를 상속받아run()메소드를 재정의합니다.
- 실행: 반드시
.start()메소드를 호출해야 새로운 실행 흐름이 만들어집니다. (.run()직접 호출은 단순 메소드 실행일 뿐입니다.)
스레드의 상태와 제어
- 주요 상태: NEW(생성) → RUNNABLE(실행 대기) → RUNNING(실행) → TERMINATED(종료)
- 일시 정지 상태
- TIMED_WAITING:
Thread.sleep(시간)처럼 일정 시간 동안 멈춤 - WAITING / BLOCKED: 다른 스레드의 작업을 기다리거나(
join), 락이 풀리기를 기다리는 상태
- TIMED_WAITING:
- 제어 메소드
sleep(long millis): 지정된 시간 동안 일시 정지yield(): 다른 스레드에게 실행 양보join(): 다른 스레드가 끝날 때까지 대기
2. 동기화 (Synchronization)
- 공유 자원 문제: 여러 스레드가 하나의 객체(공유 자원)에 동시에 접근하여 수정하면 데이터가 오염될 수 있습니다.
- 동기화: 공유 객체에 Lock을 걸어, 한 번에 하나의 스레드만 접근하도록 제어하는 것입니다.
synchronized
- synchronized 메소드: 메소드 전체를 잠급니다.
- synchronized 블록: 메소드 내의 특정 코드 영역만 잠급니다.
wait()¬ify(): 동기화 블록 안에서 사용하며, 스레드 간의 실행 순서를 제어합니다.
3. 스레드 안전 종료와 스레드 풀
안전한 종료
- 스레드를 갑자기 강제 종료하면 리소스 문제가 발생할 수 있습니다.
interrupt()메소드를 호출하여 예외를 발생시키거나, 플래그 변수를 사용하여 스레드가 스스로run()을 마치도록 유도해야 합니다.
데몬 스레드 (Daemon Thread)
- 주 스레드를 돕는 보조 스레드입니다.
- 주 스레드가 종료되면 데몬 스레드도 강제적으로 자동 종료됩니다. (
setDaemon(true))
스레드 풀 (ExecutorService)
- 스레드 생성과 삭제는 비용이 큽니다.
- 스레드 풀: 미리 정해진 개수의 스레드를 만들어 놓고, 작업이 들어오면 재사용합니다.
execute()(리턴값 없음) 또는submit()(리턴값 있음) 으로 작업을 요청합니다.
감사합니다.
'Language > JAVA' 카테고리의 다른 글
| [이것이 자바다].ch15.람다식 (0) | 2026.01.01 |
|---|---|
| [이것이 자바다].ch14.컬렉션 (0) | 2025.12.30 |
| [이것이 자바다].ch12.제네릭 (0) | 2025.12.29 |
| [이것이 자바다].ch11.java.base 모듈 (0) | 2025.12.29 |
| [이것이 자바다].ch10.예외처리 (0) | 2025.12.28 |