Programing/Java

Java CocurrentHashMap

BUST 2018. 11. 27. 23:11

Java CocurrentHashMap

  • 동시성 (Concurrency) 을 보장해주는 Map
  • Key/Value값으로 null이 허용되지 않는다.
  • get method는 blocking이 일어나지 않는다. 
  • hashCode()의 값을 동일한 값으로 나오는 Key값은 Map의 성능을 하락 시킨다 (이는 다른 HashMap 동일함)

생성자

  • initialCapacity - 처음 초기 수용량 (Capacitiy)
  • loadFactor - table의 density
  • concurrencyLevel - 동시에 몇개의 Thread가 Update를 허용할 수치

Metric으로 사용되는 Counter를 저장하는 예

counterMap.computeIfAbsent(key, key -> new Counter()).increment()
  • computeIfAbsent를 이용하여 key값에 해당하는 value가 없는 경우에는 객체를 생성을 하는 로직을 추가를 할수가 있다.

putIfAbsent와 computeIfAbsent의 차이 (2018. 11. 28 추가)

  • putIfAbsent는 newValue의 값을 받고, computeIfAbsent는 Supplier를 받는다.
    • 객체를 초기화하는 게 무거운 객체이면 쓸데없는 객체를 생성하지 않도록 computeIfAbsent를 쓰는 것이 좋다.
  •  putIfAbsent이전 값을 리턴한다.. (the previous value associated with the specified key)
  • computeIfAbsent생성되거나 기존이 있는 값을 리턴한다.


'Programing > Java' 카테고리의 다른 글

JCommander  (0) 2019.01.04
Gradle, Maven  (0) 2018.12.10
URI  (0) 2018.11.22
Queue 자료 구조  (0) 2018.11.12
Jackson ObjectMapper  (0) 2018.10.25