ReentrantLock은 lock·try·finally·unlock 순서를 lexical하게 고정한다

임계 영역이 예외로 끝나도 finally가 정확히 한 번 lock을 해제해야 합니다.

  1. 1

    lock()

    소유권 획득

  2. 2

    try

    보호 코드 진입

  3. 3

    검증

    불변식 확인

  4. 4

    commit

    상태 변경

  5. 5

    finally unlock

    항상 해제

핵심: lock 호출은 try 밖에 두어 획득 실패 뒤 잘못된 unlock을 피합니다.