We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HashMap의 동시성을 해결하기 위해 collections.synchronizedMap을 사용해 동시성을 해결했는데 ConcurrentHashMap이 등장하면서 어떻게 더 개선된건지 알고싶습니다.
p.290
The text was updated successfully, but these errors were encountered:
/* HashMap : 동기화를 위한 synchronized 키워드 X */ public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } /* HashTable : 동기화를 위한 synchronized 키워드 O */ public synchronized V get(Object key) { // ... 중략 ... } public synchronized V put(K key, V value) { // ... 중략 ... }
HashTable : 데이터를 다루는 메서드(get(), put(), remove() 등)들에 synchronized 키워드가 선언되어 있다(락이 걸려져 있다).
ConcurrentHashMap : 데이터를 다루는 메서드 전체가 아니라, 조작할 데이터에 대해서만 synchronized 키워드를 선언한다(락을 건다). 따라서 HashTable에 비해 속도↑, 그리고 당연히 HashMap에 비해 안정성↑.
** ConcurrentHashMap
/* ConcurrentHashMap : 꼭 필요한 경우(이미 노드가 존재하는 경우)에만 synchronized를 이용란 lock */ final V putVal(K key, V value, boolean onlyIfAbsent) { ... else { V oldVal = null; synchronized (f) { // <- 동기화 ... } }
Sorry, something went wrong.
No branches or pull requests
문제
contents - 세부 내용
HashMap의 동시성을 해결하기 위해 collections.synchronizedMap을 사용해 동시성을 해결했는데
ConcurrentHashMap이 등장하면서 어떻게 더 개선된건지 알고싶습니다.
참고
p.290
The text was updated successfully, but these errors were encountered: