락 소유 구간과 Condition 대기

await는 연결된 락을 잠시 놓지만 반환할 때 다시 소유한 상태다.

실행 구간

공유 필드와 조건 술어를 ReentrantLock이 보호한다.

신호 구간

상태 전이 직후 같은 락을 가진 채 signal을 호출한다.

await 경계

조건 대기

await가 대기실 등록과 락 반납을 하나로 처리한다.

복귀 경쟁

신호 뒤 락을 다시 얻어야 await 다음 줄로 진행한다.

핵심: Condition 객체는 자신을 만든 락과 분리해서 사용할 수 없다.