wait와 notify는 올바르게 사용하기가 까다로우니 고수준 동시성 유틸리티를 사용하는 것이 좋습니다.
동시성 컬렉션
List, Queue, Map 같은 표준 컬렉션 인터페이스에 동시성을 가미해 구현한 고성능 컬렉션입니다. 동시ㅓㅇ 컬렉션에서 동시성을 무력화하는건 불가능하며, 외부에서 락을 추가로 사용하면 오히려 속도가 느려집니다.
동시성을 무력화하지 못하므로 여러 메서드를 원자적으로 묶어 호출하는 일도 불가능합니다. 그래서 여러 기본 동작을 하나의 원자적 동작으로 묶는 '상태 의존적 수정' 메서드들이 추가되었습니다. 예를 들어 Map의 putIfAbsent(key, value)메서드는 주어진 키에 매핑된 값이 아직 없을 떄만 새 값을 집어넣습니다.
동기화 장치
동기화 장치는 스레드가 다른 스레드를 기다릴 수 있게 해 서로의 작업을 조율할 수 있게 해줍니다. 가장 자주 쓰이느 동기화 장치는 CountDownLatch와 Semaphore입니다. 그리고 가장 강력한 동기화 장지치는 Phaser입니다.
반응형