java.lang.Objectjava.util.AbstractMap<K, V>
java.util.concurrent.ConcurrentHashMap
All Implemented Interfaces:
ConcurrentMap, java$io$Serializable, Map
Retrieval operations (including get) generally do not block, so may overlap with update operations (including put and remove). Retrievals reflect the results of the most recently completed update operations holding upon their onset. For aggregate operations such as putAll and clear, concurrent retrievals may reflect insertion or removal of only some entries. Similarly, Iterators and Enumerations return elements reflecting the state of the hash table at some point at or since the creation of the iterator/enumeration. They do not throw ConcurrentModificationException . However, iterators are designed to be used by only one thread at a time.
The allowed concurrency among update operations is guided by the optional concurrencyLevel constructor argument (default 16), which is used as a hint for internal sizing. The table is internally partitioned to try to permit the indicated number of concurrent updates without contention. Because placement in hash tables is essentially random, the actual concurrency will vary. Ideally, you should choose a value to accommodate as many threads as will ever concurrently modify the table. Using a significantly higher value than you need can waste space and time, and a significantly lower value can lead to thread contention. But overestimates and underestimates within an order of magnitude do not usually have much noticeable impact. A value of one is appropriate when it is known that only one thread will modify and all others will only read. Also, resizing this or any other kind of hash table is a relatively slow operation, so, when possible, it is a good idea to provide estimates of expected table sizes in constructors.
This class and its views and iterators implement all of the optional methods of the Map and Iterator interfaces.
Like Hashtable but unlike HashMap , this class does not allow null to be used as a key or value.
This class is a member of the Java Collections Framework.
- the type of keys maintained by this map - the type of mapped values1.5 - Doug - Lea| Nested Class Summary: | ||
|---|---|---|
| static final class | ConcurrentHashMap.HashEntry | ConcurrentHashMap list entry. Note that this is never exported out as a user-visible Map.Entry. |
| static final class | ConcurrentHashMap.Segment | Segments are specialized versions of hash tables. This subclasses from ReentrantLock opportunistically, just to simplify some locking and avoid separate construction. |
| abstract class | ConcurrentHashMap.HashIterator | |
| final class | ConcurrentHashMap.KeyIterator | |
| final class | ConcurrentHashMap.ValueIterator | |
| final class | ConcurrentHashMap.WriteThroughEntry | Custom Entry class used by EntryIterator.next(), that relays setValue changes to the underlying map. |
| final class | ConcurrentHashMap.EntryIterator | |
| final class | ConcurrentHashMap.KeySet | |
| final class | ConcurrentHashMap.Values | |
| final class | ConcurrentHashMap.EntrySet | |
| Field Summary | ||
|---|---|---|
| static final int | DEFAULT_INITIAL_CAPACITY | The default initial capacity for this table, used when not otherwise specified in a constructor. |
| static final float | DEFAULT_LOAD_FACTOR | The default load factor for this table, used when not otherwise specified in a constructor. |
| static final int | DEFAULT_CONCURRENCY_LEVEL | The default concurrency level for this table, used when not otherwise specified in a constructor. |
| static final int | MAXIMUM_CAPACITY | The maximum capacity, used if a higher value is implicitly specified by either of the constructors with arguments. MUST be a power of two <= 1<<30 to ensure that entries are indexable using ints. |
| static final int | MIN_SEGMENT_TABLE_CAPACITY | The minimum capacity for per-segment tables. Must be a power of two, at least two to avoid immediate resizing on next use after lazy construction. |
| static final int | MAX_SEGMENTS | The maximum number of segments to allow; used to bound constructor arguments. Must be power of two less than 1 << 24. |
| static final int | RETRIES_BEFORE_LOCK | Number of unsynchronized retries in size and containsValue methods before resorting to locking. This is used to avoid unbounded retries if tables undergo continuous modification which would make it impossible to obtain an accurate result. |
| final int | segmentMask | Mask value for indexing into segments. The upper bits of a key's hash code are used to choose the segment. |
| final int | segmentShift | Shift value for indexing within segments. |
| final Segment<K, V>[] | segments | The segments, each of which is a specialized hash table. |
| transient Set<K> | keySet | |
| transient Set<K, V> | entrySet | |
| transient Collection<V> | values | |
| Fields inherited from java.util.AbstractMap: |
|---|
| keySet, values |
| Constructor: |
|---|
|
|
|
|
|
| Method from java.util.concurrent.ConcurrentHashMap Summary: |
|---|
| clear, contains, containsKey, containsValue, elements, entryAt, entryForHash, entrySet, get, isEmpty, keySet, keys, put, putAll, putIfAbsent, remove, remove, replace, replace, segmentAt, setEntryAt, size, values |
| Methods from java.util.AbstractMap: |
|---|
| clear, clone, containsKey, containsValue, entrySet, equals, get, hashCode, isEmpty, keySet, put, putAll, remove, size, toString, values |
| Methods from java.lang.Object: |
|---|
| clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Method from java.util.concurrent.ConcurrentHashMap Detail: |
|---|
|
|
|
|
|
|
|
The view's iterator is a "weakly consistent" iterator that will never throw ConcurrentModificationException , and guarantees to traverse elements as they existed upon construction of the iterator, and may (but is not guaranteed to) reflect any modifications subsequent to construction. |
More formally, if this map contains a mapping from a key {@code k} to a value {@code v} such that {@code key.equals(k)}, then this method returns {@code v}; otherwise it returns {@code null}. (There can be at most one such mapping.) |
|
The view's iterator is a "weakly consistent" iterator that will never throw ConcurrentModificationException , and guarantees to traverse elements as they existed upon construction of the iterator, and may (but is not guaranteed to) reflect any modifications subsequent to construction. |
|
The value can be retrieved by calling the get method with a key that is equal to the original key. |
|
|
|
|
|
|
|
|
|
The view's iterator is a "weakly consistent" iterator that will never throw ConcurrentModificationException , and guarantees to traverse elements as they existed upon construction of the iterator, and may (but is not guaranteed to) reflect any modifications subsequent to construction. |