JavaTM Platform
Standard Ed. 6

java.util.concurrent
클래스 ConcurrentHashMap<K, V>

java.lang.Object 
  상위를 확장 java.util.AbstractMap <K, V>
      상위를 확장 java.util.concurrent.ConcurrentHashMap<K, V>
형태 파라미터:
K - 이 맵이 보관 유지하는 키의 형태
V - 맵 되는 값의 형태
모든 구현된 인터페이스:
Serializable , ConcurrentMap <K, V>, Map <K, V>


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

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

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

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

이 클래스와 그 뷰 및 반복자는,MapIterator 인터페이스의 「옵션」메소드 모든 것을 구현합니다.

Hashtable 와 같게 (HashMap 와는 다르다), 이 클래스는, 키 또는 값으로 해서 null 를 사용하는 것을 허가하지 않습니다.

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

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

상자의 클래스의 개요
 
클래스 java.util. AbstractMap 로부터 상속된 상자의 클래스/인터페이스
AbstractMap.SimpleEntry <K ,V >, AbstractMap.SimpleImmutableEntry <K ,V >
 
인터페이스 java.util. Map 로부터 상속된 상자의 클래스/인터페이스
Map.Entry <K ,V >
 
생성자 의 개요
ConcurrentHashMap ()
          디폴트의 초기 용량 (16), 부하 계수 (0.75), 및 concurrencyLevel (16)로, 새로운 빈 상태(empty)의 맵을 작성합니다.
ConcurrentHashMap (int initialCapacity)
          지정된 초기 용량, 및 디폴트의 부하 계수 (0.75)와 concurrencyLevel (16)로, 새로운 빈 상태(empty)의 맵을 작성합니다.
ConcurrentHashMap (int initialCapacity, float loadFactor)
          지정된 초기 용량과 부하 계수, 및 디폴트의 concurrencyLevel (16)로, 새로운 빈 상태(empty)의 맵을 작성합니다.
ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel)
          지정된 초기 용량, 부하 계수, 및 동시성 처리 레벨로, 새로운 빈 상태(empty)의 맵을 작성합니다.
ConcurrentHashMap (Map <? extends K ,? extends V > m)
          지정된 맵과 같은 매핑으로 새로운 맵을 작성합니다.
 
메소드의 개요
 void clear ()
          모든 매핑을 맵으로부터 삭제합니다.
 boolean contains (Object  value)
          일부의 키가 이 테이블내의 지정된 값에 매핑 될지 어떨지를 테스트하는 종래의 메소드.
 boolean containsKey (Object  key)
          지정된 객체가, 이 테이블의 키인가 어떤가를 판정합니다.
 boolean containsValue (Object  value)
          맵이 1 개 또는 복수의 키와 지정된 값을 매핑 하고 있는 경우에 true 를 돌려줍니다.
 Enumeration <V > elements ()
          테이블에 있는 값의 리스트를 돌려줍니다.
 Set <Map.Entry <K ,V >> entrySet ()
          이 맵에 포함되는 맵 Set 뷰를 돌려줍니다.
 V get (Object  key)
          지정된 키가 맵 되고 있는 값을 돌려줍니다.
 boolean isEmpty ()
          맵이 키와 값의 매핑을 보관 유지하지 않는 경우에 true 를 돌려줍니다.
 Enumeration <K > keys ()
          테이블에 있는 키의 열거를 돌려줍니다.
 Set <K > keySet ()
          이 맵에 포함되는 키 Set 뷰를 돌려줍니다.
 V put (K  key, V  value)
          이 테이블로, 지정된 키가 지정된 값에 맵 합니다.
 void putAll (Map <? extends K ,? extends V > m)
          지정한 맵으로부터 이 맵에 모든 매핑을 카피합니다.
 V putIfAbsent (K  key, V  value)
          지정된 키가 아직 값과 관련지을 수 있지 않은 경우는, 지정된 값에 관련짓습니다.
 V remove (Object  key)
          키 ( 및 거기에 대응하는 값)를 이 맵으로부터 삭제합니다.
 boolean remove (Object  key, Object  value)
          지정된 값에 키가 현재 매핑 되고 있는 경우에게만, 그 키의 엔트리를 삭제합니다.
 V replace (K  key, V  value)
          키가 값에 현재 매핑 되고 있는 경우에게만, 그 키의 엔트리를 치환합니다.
 boolean replace (K  key, V  oldValue, V  newValue)
          지정된 값에 키가 현재 매핑 되고 있는 경우에게만, 그 키의 엔트리를 치환합니다.
 int size ()
          맵내의 키치 매핑의 수를 돌려줍니다.
 Collection <V > values ()
          이 맵에 포함되는 값 Collection 뷰를 돌려줍니다.
 
클래스 java.util. AbstractMap 로부터 상속된 메소드
clone , equals , hashCode , toString
 
클래스 java.lang. Object 로부터 상속된 메소드
finalize , getClass , notify , notifyAll , wait , wait , wait
 
인터페이스 java.util. Map 로부터 상속된 메소드
equals , hashCode
 

생성자 의 상세

ConcurrentHashMap

public ConcurrentHashMap(int initialCapacity,
                         float loadFactor,
                         int concurrencyLevel)
지정된 초기 용량, 부하 계수, 및 동시성 처리 레벨로, 새로운 빈 상태(empty)의 맵을 작성합니다.

파라미터:
initialCapacity - 초기 용량. 다수의 요소에 적합하도록, 구현은 내부의 사이즈 설정을 실행하는
loadFactor - 사이즈 변경의 제어에 사용되는 부하 계수의 임계치. 사이즈 변경은, 빈 마다의 요소의 평균수가 이 임계치를 넘었을 경우에 실행할 수 있는
concurrencyLevel - 병행해 갱신중의 thread의 추정수. 다수의 thread에 적합하도록, 구현은 내부의 사이즈 설정을 실행한다
예외:
IllegalArgumentException - 초기 용량이 부인지, 부하 계수 또는 concurrencyLevel 가 정이 아닌 경우

ConcurrentHashMap

public ConcurrentHashMap(int initialCapacity,
                         float loadFactor)
지정된 초기 용량과 부하 계수, 및 디폴트의 concurrencyLevel (16)로, 새로운 빈 상태(empty)의 맵을 작성합니다.

파라미터:
initialCapacity - 다수의 요소에 적합하도록, 구현은 내부의 사이즈 설정을 실행하는
loadFactor - 사이즈 변경의 제어에 사용되는 부하 계수의 임계치. 사이즈 변경은, 빈 마다의 요소의 평균수가 이 임계치를 넘었을 경우에 실행할 수 있다
예외:
IllegalArgumentException - 요소의 초기 용량이 부일까 부하 계수가 정이 아닌 경우
도입된 버젼:
1.6

ConcurrentHashMap

public ConcurrentHashMap(int initialCapacity)
지정된 초기 용량, 및 디폴트의 부하 계수 (0.75)와 concurrencyLevel (16)로, 새로운 빈 상태(empty)의 맵을 작성합니다.

파라미터:
initialCapacity - 초기 용량 다수의 요소에 적합하도록, 구현은 내부의 사이즈 설정을 실행한다
예외:
IllegalArgumentException - 요소의 초기 용량이 부의 경우

ConcurrentHashMap

public ConcurrentHashMap()
디폴트의 초기 용량 (16), 부하 계수 (0.75), 및 concurrencyLevel (16)로, 새로운 빈 상태(empty)의 맵을 작성합니다.


ConcurrentHashMap

public ConcurrentHashMap(Map <?  extends K ,?  extends V > m)
지정된 맵과 같은 매핑으로 새로운 맵을 작성합니다. 맵은, 지정된 맵의 매핑수의 1.5 배의 용량 또는 16 (어느 쪽인지 큰 편), 및 디폴트의 부하 계수 (0.75)와 concurrencyLevel (16)로 작성됩니다.

파라미터:
m - 맵
메소드의 상세

isEmpty

public boolean isEmpty()
맵이 키와 값의 매핑을 보관 유지하지 않는 경우에 true 를 돌려줍니다.

정의:
인터페이스 Map <K ,V > 내의 isEmpty
오버라이드(override):
클래스 AbstractMap <K ,V > 내의 isEmpty
반환값:
맵이 키와 값의 매핑을 보관 유지하지 않는 경우는 true

size

public int size()
맵내의 키치 매핑의 수를 돌려줍니다. 맵에 Integer.MAX_VALUE 보다 많은 요소가 있는 경우는,Integer.MAX_VALUE 를 돌려줍니다.

정의:
인터페이스 Map <K ,V > 내의 size
오버라이드(override):
클래스 AbstractMap <K ,V > 내의 size
반환값:
맵내의 키와 값의 매핑의 수

get

public V  get(Object  key)
지정된 키가 맵 되고 있는 값을 돌려줍니다. 그 키의 매핑이 이 맵에 포함되지 않은 경우는 null 를 돌려줍니다.

즉, 이 메소드는,key.equals(k) 가 되는 키 k 로부터 값 v 에의 매핑이 이 맵에 포함되어 있는 경우는 v 를 돌려주어, 그 이외의 경우는 null 를 돌려줍니다. 이러한 매핑이 1 개만 있습니다.

정의:
인터페이스 Map <K ,V > 내의 get
오버라이드(override):
클래스 AbstractMap <K ,V > 내의 get
파라미터:
key - 관련지을 수 있었던 값이 반환되는 키
반환값:
지정된 키가 맵 되고 있는 값. 그 키의 매핑이 이 맵에 포함되지 않은 경우는 null
예외:
NullPointerException - 지정된 키가 null 인 경우

containsKey

public boolean containsKey(Object  key)
지정된 객체가, 이 테이블의 키인가 어떤가를 판정합니다.

정의:
인터페이스 Map <K ,V > 내의 containsKey
오버라이드(override):
클래스 AbstractMap <K ,V > 내의 containsKey
파라미터:
key - 가능한 키
반환값:
equals 메소드로 결정되어 있도록(듯이), 지정된 객체가 이 테이블의 키인 경우는 true, 그렇지 않은 경우는 false
예외:
NullPointerException - 지정된 키가 null 인 경우

containsValue

public boolean containsValue(Object  value)
맵이 1 개 또는 복수의 키와 지정된 값을 매핑 하고 있는 경우에 true 를 돌려줍니다. 주:이 메소드는, 해시 테이블의 완전한 내부 traversal를 필요로 하기 (위해)때문에,containsKey 메소드보다 처리 속도가 큰폭으로 늦어집니다.

정의:
인터페이스 Map <K ,V > 내의 containsValue
오버라이드(override):
클래스 AbstractMap <K ,V > 내의 containsValue
파라미터:
value - 맵에 있을지 어떨지를 판정되는 값
반환값:
이 맵이 1 개 이상의 키가 지정된 값에 매핑 하는 경우는 true
예외:
NullPointerException - 지정된 값이 null 인 경우

contains

public boolean contains(Object  value)
일부의 키가 이 테이블내의 지정된 값에 매핑 될지 어떨지를 테스트하는 종래의 메소드. 이 메소드는 containsValue(java.lang.Object) 와 같은 기능을 가집니다. 이것은, Java Collections Framework 의 도입전에 이 메소드를 지원하고 있던,Hashtable 클래스와의 완전한 호환성을 유지하기 위해(때문에)인 만큼 존재합니다.

파라미터:
value - 검색하는 값
반환값:
있는 키가 equals 메소드로 결정되어 있는, 이 테이블의 value 인수에 매핑 하는 경우는 true, 그렇지 않은 경우는 false
예외:
NullPointerException - 지정된 값이 null 인 경우

put

public V  put(K  key,
             V  value)
이 테이블로, 지정된 키가 지정된 값에 맵 합니다. 키나 값은 null 로 할 수 없습니다.

이 값은, 원의 키와 동일한 키를 지정해 get 메소드를 호출하는 것에 의해 꺼낼 수가 있습니다.

정의:
인터페이스 Map <K ,V > 내의 put
오버라이드(override):
클래스 AbstractMap <K ,V > 내의 put
파라미터:
key - 지정된 값을 관련지을 수 있는 키
value - 지정된 키에 관련지을 수 있는 값
반환값:
key 에 관련지을 수 있었던 이전의 값, 또는,key 의 매핑이 없는 경우는 null
예외:
NullPointerException - 지정된 키 또는 값이 null 의 경우

putIfAbsent

public V  putIfAbsent(K  key,
                     V  value)
지정된 키가 아직 값과 관련지을 수 있지 않은 경우는, 지정된 값에 관련짓습니다. 이것은 다음의 기술과 동등합니다.
if (! map.containsKey(key))
return map.put(key, value);
else
return map.get(key);
다만, 액션이 원자적으로 실행되는 점이 다릅니다.

정의:
인터페이스 ConcurrentMap <K ,V > 내의 putIfAbsent
파라미터:
key - 지정된 값을 관련지을 수 있는 키
value - 지정된 키에 관련지을 수 있는 값
반환값:
지정된 키에 관련지을 수 있었던 이전의 값. 키의 매핑이 없었던 경우는 null
예외:
NullPointerException - 지정된 키 또는 값이 null 의 경우

putAll

public void putAll(Map <?  extends K ,?  extends V > m)
지정한 맵으로부터 이 맵에 모든 매핑을 카피합니다. 이것에 의해, 맵이 지정된 맵내에 현재 있는 키의 모두에 대해서 가지고 있던 매핑을 옮겨놓을 수 있습니다.

정의:
인터페이스 Map <K ,V > 내의 putAll
오버라이드(override):
클래스 AbstractMap <K ,V > 내의 putAll
파라미터:
m - 맵에 포함되는 매핑

remove

public V  remove(Object  key)
키 ( 및 거기에 대응하는 값)를 이 맵으로부터 삭제합니다. 그 키가 맵에 없는 경우는, 아무것도 실시하지 않습니다.

정의:
인터페이스 Map <K ,V > 내의 remove
오버라이드(override):
클래스 AbstractMap <K ,V > 내의 remove
파라미터:
key - 삭제할 필요가 있는 키
반환값:
key 에 관련지을 수 있었던 이전의 값. key 의 매핑이 없었던 경우는 null
예외:
NullPointerException - 지정된 키가 null 인 경우

remove

public boolean remove(Object  key,
                      Object  value)
지정된 값에 키가 현재 매핑 되고 있는 경우에게만, 그 키의 엔트리를 삭제합니다. 이것은 다음의 기술과 동등합니다.
if (map.containsKey(key) && map.get(key). equals(value)) {
map.remove(key);
return true;
} else return false;
다만, 액션이 원자적으로 실행되는 점이 다릅니다.

정의:
인터페이스 ConcurrentMap <K ,V > 내의 remove
파라미터:
key - 지정된 값을 관련지을 수 있는 키
value - 지정된 키에 관련지을 수 있고 있다고 예상되는 값
반환값:
치가 삭제되었을 경우는 true
예외:
NullPointerException - 지정된 키가 null 인 경우

replace

public boolean replace(K  key,
                       V  oldValue,
                       V  newValue)
지정된 값에 키가 현재 매핑 되고 있는 경우에게만, 그 키의 엔트리를 치환합니다. 이것은 다음의 기술과 동등합니다.
if (map.containsKey(key) && map.get(key). equals(oldValue)) {       map.put(key, newValue);

return true;
} else return false;
다만, 액션이 원자적으로 실행되는 점이 다릅니다.

정의:
인터페이스 ConcurrentMap <K ,V > 내의 replace
파라미터:
key - 지정된 값을 관련지을 수 있는 키
oldValue - 지정된 키에 관련지을 수 있고 있다고 예상되는 값
newValue - 지정된 키에 관련지을 수 있는 값
반환값:
치가 치환되었을 경우는 true
예외:
NullPointerException - 인수가 1 개에서도 null 의 경우

replace

public V  replace(K  key,
                 V  value)
키가 값에 현재 매핑 되고 있는 경우에게만, 그 키의 엔트리를 치환합니다. 이것은 다음의 기술과 동등합니다.
if (map.containsKey(key)) {
return map.put(key, value);
} else return null;
다만, 액션이 원자적으로 실행되는 점이 다릅니다.

정의:
인터페이스 ConcurrentMap <K ,V > 내의 replace
파라미터:
key - 지정된 값을 관련지을 수 있는 키
value - 지정된 키에 관련지을 수 있는 값
반환값:
지정된 키에 관련지을 수 있었던 이전의 값. 키의 매핑이 없었던 경우는 null
예외:
NullPointerException - 지정된 키 또는 값이 null 의 경우

clear

public void clear()
모든 매핑을 맵으로부터 삭제합니다.

정의:
인터페이스 Map <K ,V > 내의 clear
오버라이드(override):
클래스 AbstractMap <K ,V > 내의 clear

keySet

public Set <K > keySet()
이 맵에 포함되는 키 Set 뷰를 돌려줍니다. 세트는 맵과 연동하고 있으므로, 맵에 대한 변경은 세트에 반영되어 또, 세트에 대한 변경은 맵에 반영됩니다. 세트는,Iterator.remove,Set.remove,removeAll,retainAll, 및 clear 의 각 오퍼레이션보다, 맵으로부터 대응하는 매핑을 삭제하는 요소 삭제 처리를 지원합니다. Set 는,add 오퍼레이션이나 addAll 오퍼레이션은 지원하고 있습니다.

뷰의 Iterator 는 「약일관성」을 가지는 반복자이며,ConcurrentModificationException 를 throw 할 것은 없고, 반복자의 구축시에 존재한 요소를 횡단(traverse) 하는 것을 보증합니다. 또, 구축 후의 모든 변경을 반영합니다 (다만 보증되지는 않았다).

정의:
인터페이스 Map <K ,V > 내의 keySet
오버라이드(override):
클래스 AbstractMap <K ,V > 내의 keySet
반환값:
맵에 포함되어 있는 키의 셋트뷰

values

public Collection <V > values()
이 맵에 포함되는 값 Collection 뷰를 돌려줍니다. 컬렉션은 맵과 연동하고 있으므로, 맵에 대한 변경은 컬렉션에 반영되어 또 컬렉션에 대한 변경은 맵에 반영됩니다. 컬렉션은,Iterator.remove,Collection.remove,removeAll,retainAll, 및 clear 오퍼레이션에 의해, 맵으로부터 대응하는 매핑을 삭제하는 요소 삭제 처리를 지원합니다. Set 는,add 오퍼레이션이나 addAll 오퍼레이션은 지원하고 있습니다.

뷰의 Iterator 는 「약일관성」을 가지는 반복자이며,ConcurrentModificationException 를 throw 할 것은 없고, 반복자의 구축시에 존재한 요소를 횡단(traverse) 하는 것을 보증합니다. 또, 구축 후의 모든 변경을 반영합니다 (다만 보증되지는 않았다).

정의:
인터페이스 Map <K ,V > 내의 values
오버라이드(override):
클래스 AbstractMap <K ,V > 내의 values
반환값:
맵내에 포함되어 있는 값의 코레크션뷰

entrySet

public Set <Map.Entry <K ,V >> entrySet()
이 맵에 포함되는 맵 Set 뷰를 돌려줍니다. 세트는 맵과 연동하고 있으므로, 맵에 대한 변경은 세트에 반영되어 또, 세트에 대한 변경은 맵에 반영됩니다. 삭제는,Iterator.remove,Set.remove,removeAll,retainAll, 및 clear 의 각 오퍼레이션을 통해 실시합니다. Set 는,add 오퍼레이션이나 addAll 오퍼레이션은 지원하고 있습니다.

뷰의 Iterator 는 「약일관성」을 가지는 반복자이며,ConcurrentModificationException 를 throw 할 것은 없고, 반복자의 구축시에 존재한 요소를 횡단(traverse) 하는 것을 보증합니다. 또, 구축 후의 모든 변경을 반영합니다 (다만 보증되지는 않았다).

정의:
인터페이스 Map <K ,V > 내의 entrySet
정의:
클래스 AbstractMap <K ,V > 내의 entrySet
반환값:
맵내에 보관 유지되고 있는 매핑의 셋트뷰

keys

public Enumeration <K > keys()
테이블에 있는 키의 열거를 돌려줍니다.

반환값:
테이블에 있는 키의 리스트
관련 항목:
keySet()

elements

public Enumeration <V > elements()
테이블에 있는 값의 리스트를 돌려줍니다.

반환값:
테이블에 있는 값의 리스트
관련 항목:
values()

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.