内容简介:本文主要研究一下Elasticsearch的ConcurrentMapLongelasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/concurrent/ConcurrentMapLong.javaelasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/concurrent/ConcurrentHashMapLong.java
序
本文主要研究一下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
小结
Math.max(Runtime.getRuntime().availableProcessors() * 2, 16)
doc
以上所述就是小编给大家介绍的《聊聊Elasticsearch的ConcurrentMapLong》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序员的思维修炼
Andy Hunt / 崔康 / 人民邮电出版社 / 2010-12-10 / 39.00元
本书解释了为什么软件开发是一种精神活动,思考如何解决问题,并就开发人员如何能更好地开发软件进行了评论。书中不仅给出了一些理论上的答案,同时提供了大量实践技术和窍门。 本书供各层次软件开发人员阅读。一起来看看 《程序员的思维修炼》 这本书的介绍吧!