작성
·
109
·
수정됨
0
ReentrantLock에서 lock.unlock()을 호출하면, 대기 중인 스레드들이 락을 획득하려고 서로 경쟁하게 됩니다.
제가 이해한 바로는, unlock이 호출된 후 스레드들중 락을 획득한 한개의 스레드는 RUNNABLE 상태로 전환되고, 나머지 락을 획득하지 못한 스레드들은 다시 WAITING 상태로 돌아가는 것이라고 알고 있습니다.
이 과정에서 스레드들이 경쟁하는 순간의 상태가 정확히 어떻게 되는지 궁금합니다.
경쟁순간에는 락을 획득하려는 스레드들 모두 RUNNABLE 상태인가요?
답변 1
1
안녕하세요. yummngi님
lock.unlock()을 호출하면 대기중인 모든 스레드가 RUNNABLE이 되는 것이 아니라, 대기 스레드 중 하나의 스레드만이 깨워져 락 획득을 시도합니다.
깨워진 스레드는 Runnable 상태가 되고, 락을 획득하기 위해 경쟁합니다. 성공하면 락을 소유하게 되고, 그렇지 못하면 다시 대기 상태가 됩니다.
감사합니다.