JAVA 면접 질문 공부

ConcurrentHashMap

 

모든 operation은 thread-safe하지만 데이터를 get할 때는 필수조건으로 lock을 걸지 않는다. 이와 달리 HashMap은 멀티스레드 환경에서 안전하지 않아 동시성 문제가 발생할 수 있다. 

 

ConcurrentHashMap의 put 메소드를 보면 multi-thread 환경에서 어떻게 동시성을 보장하는지 알 수 있다. ConcurrentHashMap이 empty일 때는 lock을 잡지않는다.(CAS(Compare and Swap)) 특히 map 전체가 아닌 node단위로 lock을 건다.

이 부분이 포인트인데 node 단위로 걸기 때문에 lock이 걸리지 않은 node를 조회, CUD 시 성능이 저하되지 않는다.

반응형