기본 패턴
java
Runnable task = () -> {
System.out.println("work on " + Thread.currentThread().getName());
};
Thread thread = new Thread(task, "worker-1");
thread.start();
thread.join();설명
- 스레드는 하나의 프로세스 안에서 동시에 실행 흐름을 나누는 단위입니다. Java 프로그램이 기본적으로
mainthread 하나에서 시작하고, 필요하면 다른 thread를 추가로 만들 수 있습니다. Runnable은 "무슨 일을 할지"를 표현하고,Thread는 "그 일을 실행하는 실제 실행 컨테이너"에 가깝습니다. 그래서 현대 Java에서는 작업 로직을Runnable이나Callable로 분리하는 편이 더 자연스럽습니다.start()는 새 thread에서run()을 실행하게 만들지만,run()을 직접 호출하면 그냥 현재 thread에서 일반 메서드 호출처럼 실행됩니다. 입문자가 자주 하는 실수입니다.- thread lifecycle을 엄밀히 외우기보다,
new -> runnable/running -> blocked/waiting -> terminated정도의 흐름을 이해하는 것이 중요합니다. CPU를 계속 잡는다고 항상 일이 빨라지는 것은 아니며, lock 대기나 I/O 대기 상태도 많습니다. - 직접
Thread를 많이 만드는 방식은 교육적으로는 좋지만, 실무에서는 보통ExecutorService나 framework가 thread 생명주기를 관리하게 맡깁니다.
빠른 정리
| 요소 | 역할 |
|---|---|
Runnable | 반환값 없는 작업 정의 |
Thread | 작업을 실제로 실행하는 thread |
start() | 새 thread에서 실행 시작 |
join() | 다른 thread 종료까지 대기 |
currentThread() | 현재 실행 중인 thread 확인 |
주의할 점
run()을 직접 호출하면 새 thread가 생기지 않습니다. "비동기로 실행한다"는 의도라면 반드시 start()와
lifecycle 제어를 함께 생각해야 합니다.
참고 링크
3 sources