序
本文主要研究一下Elasticsearch的ConcurrentMapLong
ConcurrentMapLong
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/concurrent/ConcurrentMapLong.java
public interface ConcurrentMapLong<T> extends ConcurrentMap<Long, T> {
T get(long key);
T remove(long key);
T put(long key, T value);
T putIfAbsent(long key, T value);
}
- ConcurrentMapLong继承了ConcurrentMap接口,并指定key类型为Long
ConcurrentHashMapLong
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/concurrent/ConcurrentHashMapLong.java
public class ConcurrentHashMapLong<T> implements ConcurrentMapLong<T> {
private final ConcurrentMap<Long, T> map;
public ConcurrentHashMapLong(ConcurrentMap<Long, T> map) {
this.map = map;
}
@Override
public T get(long key) {
return map.get(key);
}
@Override
public T remove(long key) {
return map.remove(key);
}
@Override
public T put(long key, T value) {
return map.put(key, value);
}
@Override
public T putIfAbsent(long key, T value) {
return map.putIfAbsent(key, value);
}
// MAP DELEGATION
@Override
public boolean isEmpty() {
return map.isEmpty();
}
@Override
public int size() {
return map.size();
}
@Override
public T get(Object key) {
return map.get(key);
}
@Override
public boolean containsKey(Object key) {
return map.containsKey(key);
}
@Override
public boolean containsValue(Object value) {
return map.containsValue(value);
}
@Override
public T put(Long key, T value) {
return map.put(key, value);
}
@Override
public T putIfAbsent(Long key, T value) {
return map.putIfAbsent(key, value);
}
@Override
public void putAll(Map<? extends Long, ? extends T> m) {
map.putAll(m);
}
@Override
public T remove(Object key) {
return map.remove(key);
}
@Override
public boolean remove(Object key, Object value) {
return map.remove(key, value);
}
@Override
public boolean replace(Long key, T oldValue, T newValue) {
return map.replace(key, oldValue, newValue);
}
@Override
public T replace(Long key, T value) {
return map.replace(key, value);
}
@Override
public void clear() {
map.clear();
}
@Override
public Set<Long> keySet() {
return map.keySet();
}
@Override
public Collection<T> values() {
return map.values();
}
@Override
public Set<Entry<Long, T>> entrySet() {
return map.entrySet();
}
@Override
public boolean equals(Object o) {
return map.equals(o);
}
@Override
public int hashCode() {
return map.hashCode();
}
@Override
public String toString() {
return map.toString();
}
}
- ConcurrentHashMapLong实现了ConcurrentMapLong接口,它内部使用ConcurrentMap实现
ConcurrentCollections
elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/concurrent/ConcurrentCollections.java
public abstract class ConcurrentCollections {
static final int aggressiveConcurrencyLevel;
static {
aggressiveConcurrencyLevel = Math.max(Runtime.getRuntime().availableProcessors() * 2, 16);
}
//......
public static <K, V> ConcurrentMap<K, V> newConcurrentMap() {
return new ConcurrentHashMap<>();
}
public static <V> ConcurrentMapLong<V> newConcurrentMapLong() {
return new ConcurrentHashMapLong<>(ConcurrentCollections.<Long, V>newConcurrentMap());
}
public static <V> ConcurrentMapLong<V> newConcurrentMapLongWithAggressiveConcurrency() {
return new ConcurrentHashMapLong<>(ConcurrentCollections.<Long, V>newConcurrentMapWithAggressiveConcurrency());
}
public static <K, V> ConcurrentMap<K, V> newConcurrentMapWithAggressiveConcurrency() {
return newConcurrentMapWithAggressiveConcurrency(16);
}
public static <K, V> ConcurrentMap<K, V> newConcurrentMapWithAggressiveConcurrency(int initalCapacity) {
return new ConcurrentHashMap<>(initalCapacity, 0.75f, aggressiveConcurrencyLevel);
}
//......
}
- ConcurrentCollections提供了newConcurrentMapLong及newConcurrentMapLongWithAggressiveConcurrency两个静态方法用于创建ConcurrentMapLong;其中newConcurrentMapLongWithAggressiveConcurrency方法创建initalCapacity为16,loadFactor为0.75f,concurrencyLevel为aggressiveConcurrencyLevel(
Math.max(Runtime.getRuntime().availableProcessors() * 2, 16)
)的ConcurrentHashMap
小结
- ConcurrentMapLong继承了ConcurrentMap接口,并指定key类型为Long
- ConcurrentHashMapLong实现了ConcurrentMapLong接口,它内部使用ConcurrentMap实现
- ConcurrentCollections提供了newConcurrentMapLong及newConcurrentMapLongWithAggressiveConcurrency两个静态方法用于创建ConcurrentMapLong;其中newConcurrentMapLongWithAggressiveConcurrency方法创建initalCapacity为16,loadFactor为0.75f,concurrencyLevel为aggressiveConcurrencyLevel(
Math.max(Runtime.getRuntime().availableProcessors() * 2, 16)
)的ConcurrentHashMap
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。