notify는 하나만 깨워 효율적이지만 역할을 고를 수 없고 notifyAll은 모두 깨운 뒤 조건으로 거릅니다.
1명 깨움 · 잘못된 역할 가능
모두 깨움 · 생존성 우선 · 재경쟁
역할별 wait set에서 선택 가능
핵심: 여러 predicate가 같은 wait set에 섞이면 전체 알림이 더 안전한 기본값입니다.