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 |