Java中的Map【四】ConcurrentMap接口 2021-09-21 07:20 189阅读 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月21日 07:04/ 0 赞/ 178 阅读
相关 Java中的Map【三】NavigableMap接口 所使用的jdk版本为1.8版本,先看一下NavigableMap<K,V>在JDK中Map的UML类图中的位置: ![watermark_type_ZmFuZ3 一时失言乱红尘/ 2021年09月21日 07:14/ 0 赞/ 176 阅读
相关 Java中的Map【四】ConcurrentMap接口 所使用的jdk版本为1.8版本,先看一下ConcurrentMap<K,V>在JDK中Map的UML类图中的位置: ![watermark_type_ZmFuZ3poZW5n 港控/mmm°/ 2021年09月21日 07:20/ 0 赞/ 190 阅读
相关 Java中的Map【五】ConcurrentNavigableMap接口 所使用的jdk版本为1.8版本,先看一下ConcurrentNavigableMap<K,V>在JDK中Map的UML类图中的位置: ![watermark_ 刺骨的言语ヽ痛彻心扉/ 2021年09月21日 07:24/ 0 赞/ 177 阅读
相关 Java ConcurrentMap 接口 Java ConcurrentMap 接口 Java 集合框架的ConcurrentMap接口提供了一个线程安全的映射。也就是说,多个线程可以一次访问该映射,而不会影响映... 朱雀/ 2022年02月19日 20:04/ 0 赞/ 8672 阅读
相关 Java集合--ConcurrentMap Java集合–ConcurrentMap 1 Map并发集合 1.1 ConcurrentMap ConcurrentMap,它是一个接口,是一个能够支持并发 我就是我/ 2022年03月15日 10:04/ 0 赞/ 35 阅读
相关 java中的Map接口 java中的Map接口 实现Map接口的类用来存储——键值对 Map接口的实现类有HashMap和TreeMap等 键值不能重复(键相当与索引) TestMap. 水深无声/ 2022年04月06日 17:40/ 0 赞/ 65 阅读
相关 ConcurrentMap接口 ConcurrentMap接口 两个实现 ConcurrentHashMap ConcurrentSkipListMap 支持并发排序功能,弥补Concurr 今天药忘吃喽~/ 2022年05月14日 12:56/ 0 赞/ 32 阅读
相关 java map接口 Map接口概述 1. 实现Map接口的集合类用来存储“键-值”映射对。key-value 2. Map实现类中存储的“键-值”映射对是通过键来唯一标识,Map底层的“键 ╰+攻爆jí腚メ/ 2022年06月10日 09:54/ 0 赞/ 49 阅读
相关 java中的集合之Map接口(四) Map接口 1.将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 2.此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口 清疚/ 2022年08月18日 19:39/ 0 赞/ 43 阅读
还没有评论,来说两句吧...