Java中的Map【四】ConcurrentMap接口 2021-09-20 23:20 357阅读 0赞 **所使用的jdk版本为1.8版本**,先看一下ConcurrentMap<K,V>在JDK中Map的UML类图中的位置: ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIyMDc2MzQ1_size_16_color_FFFFFF_t_70][] ### 2.1.4 ConcurrentMap接口 ### ConcurrentMap<K,V>接口继承Map<K,V>接口,是一种提供线程安全性和原子性保证的Map。分析一下里面的方法: 1、非default方法: V putIfAbsent(K key, V value); boolean remove(Object key, Object value); boolean replace(K key, V oldValue, V newValue); V replace(K key, V value); 这四个方法在Map<K,V>接口中均有定义,并且都是default方法。在ConcurrentMap中因为这些方法需要保证多线程下的原子性,因此需要实现类具体实现,在ConcurrentMap中都是abstract方法。 2、重写Map中的default方法 (1)default V getOrDefault(Object key, V defaultValue) default V getOrDefault(Object key, V defaultValue) { V v; return ((v = get(key)) != null) ? v : defaultValue; } 与Map中的方法不同的是,没有进行containsKey(key)这一步的判断。此实现假定ConcurrentMap不能包含null作为value值,而get(key)返回null明确表示key不存在。所以如果支持null作为value值的实现类,必须重写此默认实现。 (2)default void forEach(BiConsumer<? super K, ? super V> action) @Override default void forEach(BiConsumer<? super K, ? super V> action) { Objects.requireNonNull(action); for (Map.Entry<K, V> entry : entrySet()) { K k; V v; try { k = entry.getKey(); v = entry.getValue(); } catch(IllegalStateException ise) { // this usually means the entry is no longer in the map. continue; } action.accept(k, v); } } 与Map中的方法实现一致。传入函数式接口,用于遍历Map。 (3)default V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)、 default V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)等方法默认实现与Map中有所不同,当多个线程尝试更新(包括可能多次调用方法)时,默认实现可能会重试这些步骤,里面有一个for(;;)结构体(比较简单,注释清楚)。具体的实现类如ConcurrentHashMap都根据内部结构重写了以上方法,后续再具体实现分析。 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIyMDc2MzQ1_size_16_color_FFFFFF_t_70]: /images/20210920/e5435752d9c74d93bd646aa9f10566aa.png
相关 Java中的Map【一】Map接口 一 JDK中的Map继承实现关系 不经意间看了Java中LinkedHashMap和LinkedHashSet的源码实现,觉得一些地方还是挺有意思的。之前 谁借莪1个温暖的怀抱¢/ 2021年09月20日 23:04/ 0 赞/ 304 阅读
相关 Java中的Map【二】SortedMap接口 所使用的jdk版本为1.8版本,先看一下SortedMap在JDK中Map的UML类图中的位置: ![watermark_type_ZmFuZ3poZW5na 野性酷女/ 2021年09月20日 23:06/ 0 赞/ 314 阅读
相关 Java中的Map【三】NavigableMap接口 所使用的jdk版本为1.8版本,先看一下NavigableMap<K,V>在JDK中Map的UML类图中的位置: ![watermark_type_ZmFuZ3 一时失言乱红尘/ 2021年09月20日 23:14/ 0 赞/ 399 阅读
相关 Java中的Map【四】ConcurrentMap接口 所使用的jdk版本为1.8版本,先看一下ConcurrentMap<K,V>在JDK中Map的UML类图中的位置: ![watermark_type_ZmFuZ3poZW5n 港控/mmm°/ 2021年09月20日 23:20/ 0 赞/ 358 阅读
相关 Java中的Map【五】ConcurrentNavigableMap接口 所使用的jdk版本为1.8版本,先看一下ConcurrentNavigableMap<K,V>在JDK中Map的UML类图中的位置: ![watermark_ 刺骨的言语ヽ痛彻心扉/ 2021年09月20日 23:24/ 0 赞/ 299 阅读
相关 Java ConcurrentMap 接口 Java ConcurrentMap 接口 Java 集合框架的ConcurrentMap接口提供了一个线程安全的映射。也就是说,多个线程可以一次访问该映射,而不会影响映... 朱雀/ 2022年02月19日 12:04/ 0 赞/ 10136 阅读
相关 java中的Map接口 java中的Map接口 实现Map接口的类用来存储——键值对 Map接口的实现类有HashMap和TreeMap等 键值不能重复(键相当与索引) TestMap. 水深无声/ 2022年04月06日 09:40/ 0 赞/ 189 阅读
相关 ConcurrentMap接口 ConcurrentMap接口 两个实现 ConcurrentHashMap ConcurrentSkipListMap 支持并发排序功能,弥补Concurr 今天药忘吃喽~/ 2022年05月14日 04:56/ 0 赞/ 215 阅读
相关 java中的集合之Map接口(四) Map接口 1.将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 2.此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口 清疚/ 2022年08月18日 11:39/ 0 赞/ 135 阅读
相关 java的Map接口 [java的Set接口][java_Set] 文章目录 java的Map接口 Map的创建 Map的常用方法 矫情吗;*/ 2022年10月19日 04:19/ 0 赞/ 126 阅读
还没有评论,来说两句吧...