인프런 커뮤니티 질문&답변

yummngi님의 프로필 이미지
yummngi

작성한 질문수

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

스레드의 대기

unlock()을 호출 했을 때

작성

·

109

·

수정됨

0

ReentrantLock에서 lock.unlock()을 호출하면, 대기 중인 스레드들이 락을 획득하려고 서로 경쟁하게 됩니다.

 

제가 이해한 바로는, unlock이 호출된 후 스레드들중 락을 획득한 한개의 스레드는 RUNNABLE 상태로 전환되고, 나머지 락을 획득하지 못한 스레드들은 다시 WAITING 상태로 돌아가는 것이라고 알고 있습니다.

 

이 과정에서 스레드들이 경쟁하는 순간의 상태가 정확히 어떻게 되는지 궁금합니다.

 

경쟁순간에는 락을 획득하려는 스레드들 모두 RUNNABLE 상태인가요?

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. yummngi님

lock.unlock()을 호출하면 대기중인 모든 스레드가 RUNNABLE이 되는 것이 아니라, 대기 스레드 중 하나의 스레드만이 깨워져 락 획득을 시도합니다.

깨워진 스레드는 Runnable 상태가 되고, 락을 획득하기 위해 경쟁합니다. 성공하면 락을 소유하게 되고, 그렇지 못하면 다시 대기 상태가 됩니다.

감사합니다.

yummngi님의 프로필 이미지
yummngi

작성한 질문수

질문하기