monitor는 블록을 벗어나면 해제되고 explicit lock은 누수될 수 있다

Thread가 종료되거나 예외가 났다는 사실만으로 ReentrantLock이 자동 해제되지는 않습니다.

synchronized

블록 exit 때 JVM이 monitor 해제

lock without finally

예외 뒤 owner 유지 · 영구 대기

lock + finally

모든 경로에서 unlock

핵심: 명시적 lock은 모든 반환·예외 경로에서 finally unlock이 보이도록 작성합니다.