J-C-02 Sleep 메서드와 동기화의 함정

글 정보
카테고리
Programming/Java/Core
태그
JavaLevel1

Thread.sleep의 역할

Thread.sleep(ms)는 스레드를 잠깐 멈추는 가장 기초적인 메서드입니다.

Sleep이 정확하지 않은 이유

sleep()은 설정한 시간보다 더 오래 쉬는 경우가 흔합니다.

우연에 맡기는 코드 Programming by Coincidence

sleep()로 순서를 맞추려는 코드는 불안정합니다.

폴링 Polling 방식의 문제

루프를 돌면서 sleep()하고 상태를 확인하는 방식도 흔한 함정입니다.

올바른 종료는 interrupt로 설계합니다

sleep()보다 중요한 건 “멈추는 방법”이 아니라 “안전하게 깨우고 종료시키는 방법”입니다.


스레드의 속성과 생명주기

스레드 주요 속성

스레드는 실행 단위이며 다음 속성을 가집니다.

우선순위와 스케줄링의 현실

자바는 우선순위를 제공하지만, 절대적인 실행 순서를 보장하지 않습니다.

스레드 상태 State 정리

스레드는 생성부터 종료까지 상태를 옮겨 다닙니다.


멀티스레드가 필요한 이유

멀티스레드는 “CPU를 더 쓰기 위해서”만이 아니라 “멈추지 않는 UX”를 위해 필요합니다.

단일 스레드의 문제

I/O 작업은 느립니다.

해결은 스레드 분리입니다

역할을 나눕니다.


데몬 스레드 Daemon Thread

데몬 스레드는 “프로그램이 살아있는 동안만 의미가 있는 보조 작업”에 적합합니다.


Join 메서드와 JVM 스레드 모델

join은 확실한 순서 제어입니다

순서를 “추측”하지 말고 “기다림으로 보장”합니다.

JVM과 OS 스레드 관계를 알아야 하는 이유

자바는 편하지만, 성능을 보려면 매핑 구조를 알아야 합니다.