동시 작업을 찾고 있으므로 기본적으로 3 명의 경쟁자가 있습니다. Hashtable, ConcurrentHashMap, ConcurrentSkipListMap (또는 Collections.synchronizedMap()하지만 효율적이지 않습니다).
- 이들 중 3 개는 Hashtable과 같은 전체 맵을 잠그는 대신 맵의 일부만 잠그기 때문에 동시 작업에 더 적합합니다.
- Out of the 2 SkipListMap은 빠른 검색과 다양한 작업을 위해 평균 O (log n) 성능을 보장하는 건너 뛰기 목록 데이터 구조를 사용합니다.
- 또한 ConcurrentHashMap이 수행 할 수없는 작업 수, 즉 ceilingEntry/Key(), floorEntry/Key() 등을 제공합니다. 그렇지 않으면 계산해야 할 정렬 순서도 유지됩니다. 당신은 내가 ConcurrentHashMap의 제안 한 것 빠른 검색을 요청했지만, 당신은 또한 언급했기 때문에 따라서 경우
은 '희귀 쓰기 작업'주문 '정렬 소망하는'나는 ConcurrentSkipListMap과 경주를 승리라고 생각한다.
출처
2016-12-16 19:34:19
skY
3 달 동안 계속 운영 할 것으로 예상되는 애플리케이션에 대해서는 의심 스럽지만 솔직히 모든 ConcurrentMap 구현이 여기서 작동합니다. –
로드하는 데 너무 많은 비용이 들지 않는 한, 불변의 맵으로 가서 3 개월마다 새로운 맵을 만들면됩니다. 스레드 안전성에 대해 걱정할 필요가 없습니다. – shmosel
예, 모든 동시 콜렉션의 경우 해당 연산은 스레드로부터 안전합니다. javadoc에서도 꽤 명확합니다. get()에만 관심이 있다면 왜 O (log (n))가 아닌 O (1)이 될 ConcurrentHashMap을 사용하지 않는지 궁금합니다. –