티스토리 뷰

Computer/JAVA

[JAVA] ConcurrentHashMap

인생이글케쉬우냐 2009. 12. 16. 16:08
[출처 :  http://www.thinkingparallel.com/2007/07/31/10-ways-to-reduce-lock-contention-in-threaded-programs/
http://www.ibm.com/developerworks/java/library/j-jtp08223/
          http://agbird.egloos.com/4849046]

동기화된 맵을 사용시에 자바 1.5부터 출몰한 컹커런트 해쉬맵..
하아.. 어렵네;;;
머.. 암튼 써봐야지..

==========참고========================================================================
public class ConcurrentHashMap<K, V>
extends AbstractMap <K, V>
implements ConcurrentMap <K, V>, Serializable

취득의 완전한 동시성 및 예상되는 조정 가능한 갱신 동시성을 지원하는 해시 테이블. 이 클래스는 Hashtable 와 같은 기능 사양에 따라,Hashtable 각 메서드에 대응하는 버젼의 메서드를 포함합니다. 다만, 모든 조작이 thread 세이프인 경우에서도, 취득 조작에 락은 포함되지 않기 때문에 테이블 전체가 락 되어 모든 액세스가 거부될 것은 없습니다. 이 클래스는 thread의 안전성에 존합니다만, 동기의 상세하게 존하지 않는 프로그램내에서 Hashtable 와의 완전한 상호 운용이 가능합니다.

보통 , 취득 조작 (get를 포함한다)에서는 블록은 실행되지 않기 때문에 갱신 조작과 오버랩 하는 경우가 있습니다 (putremove를 포함한다). 취득에서는 개시시 로 유지하고 있는 갱신 조작 가운데, 마지막에 「완료했다」갱신 조작의 결과가 반영됩니다. putAllclear 등의 집계 조작에서는 동시 취득은 일부의 엔트리의 삽입이나 삭제만을 반영합니다. 같이 Iterators 및 Enumerations는 어떤 시점 또는 반복자/열거의 작성 이래의 해시 테이블 상태를 반영하는 요소를 돌려줍니다. 이것들이 ConcurrentModificationException 를 Throw 할 것은 없습니다만, 한 번에 1 개의 thread만이 반복자를 사용하도록 설계되고 있습니다.

갱신 조작으로 허가되는 동시 처리는 옵션의 concurrencyLevel 생성자 인수 (디폴트는 16)에 해 이끌립니다. 이 값은, 내부의 사이즈 설정의 힌트로서 사용됩니다. 테이블은 내부적으로 분할되어 지시받은 수의 병렬 갱신을 경합 하지 않고 허가하는 것을 시도합니다. 해시 테이블내의 배치는 기본적으로 랜덤이기 때문에 실제의 concurrent processing는 다릅니다. 이상적이게는 테이블을 동시에 변경하는 thread수에 대응한 값을 선택할 필요가 있습니다. 필요한 값보다 현저하고 큰 값을 사용하면 공간과 시간이 낭비되어 필요한 값보다 현저하고 작은 값을 사용하면 thread가 경합 할 가능성이 있습니다. 다만, 일반적으로 절대치의 순서 내부를 과대 평가 및 과소평가해도, 그만큼 큰 영향은 없습니다. 변경을 실행하는 것은 1 개의 thread만으로 나머지의 thread는 모두 독해만을 실행하는 경우, 적절한 값은 1 입니다. 또, 이 해시 테이블 또는 그 외의 종류의 해시 테이블의 사이즈 변경은 상대적으로 저속인 조작인 것으로부터, 가능한 경우는 예상되는 테이블 사이즈의 추정치를 생성자 으로 지정해 두는 것을 추천합니다.

이 클래스와 그 뷰 및 반복자는 MapIterator 인터페이스의 옵션의 메서드를 모두 구현합니다.

이 클래스는 키 또는 값으로 해서 null를 사용하는 것을 허가하지 않습니다. 이것은,Hashtable 와 같은 동작이며,HashMap 와는 다른 동작입니다.

이 클래스는 Java Collections Framework 멤버입니다.

도입된 버젼:
1.5
관련 항목:
직렬화 된 형식
======================================================================================

반응형

'Computer > JAVA' 카테고리의 다른 글

[JAVA] Float형의 소숫점 아래 고정자리 표기방법  (1) 2014.04.24
[JAVA] replace 사용  (0) 2010.01.08
Java Mail  (0) 2009.05.14
jdk 1.4와 jdk 1.5 의 차이점  (0) 2009.05.14
자바 exe파일 만들기  (0) 2009.05.14