wait는 monitor를 놓고 대기한 뒤 다시 소유해야 복귀한다

wait 호출 시점과 반환 뒤 코드 모두 같은 monitor 계약 안에 있습니다.

  1. 1

    monitor 소유

    synchronized 진입

  2. 2

    조건 false

    wait 호출

  3. 3

    release

    WAITING 집합 이동

  4. 4

    notify

    entry 경쟁으로 이동

  5. 5

    reacquire

    lock 얻은 뒤 반환

핵심: notify는 바로 lock을 넘기지 않으므로 깨어난 thread는 소유자가 나갈 때까지 다시 경쟁합니다.