if 대기는 한 번만 검사하고 while 대기는 깨어날 때마다 확인한다

notify는 조건 충족을 보장하지 않고 단지 상태가 바뀌었을 가능성을 알립니다.

if + wait

깨어난 뒤 바로 진행 · 오래된 조건

while + wait

lock 재획득 뒤 predicate 재검사

규칙

조건 true일 때만 loop 탈출

핵심: spurious wakeup과 다른 소비자의 선점 뒤에도 while은 안전합니다.