Java并发包:ConcurrentMap
发布日期:2021-07-01 01:39:30 浏览次数:2 分类:技术文章

本文共 2291 字,大约阅读时间需要 7 分钟。

转载自  

 

文章译自: 

抽空翻译了一下这个教程的文章,后面会陆续放出,如有不妥,请批评指正。 
转自请注明出处。 
之前漏了一篇文章,这篇应该是在双端队列之后的,这里补上。

ConcurrentMap

java.util.concurrent.ConcurrentMap接口代表一个Map,它可以处理并发访问。ConcurrentMap除了继承自java.util.Map的方法,还有一些自己的原子方法。

ConcurrentMap的具体实现

由于ConcurrentMap是一个接口类,使用时需要使用它的实现类。Java.util.concurrent包中有下面关于ConcurrentMap接口的实现类。

  • ConcurrentHashMap

ConcurrentHashMap

ConcurrentHashMap除了有更好的并行性,它与java.util.HashTable类时非常相似的。当你从ConcurrentHashMap读取数据的时候ConcurrentHashMap是不会加锁的。另外,ConcurrenthashMap在写的时候不会全部加锁。它仅仅锁住Map中正在被写入的部分。

ConcurrentHashMap的另一个不同之处是,如果在迭代的时候ConcurrentHashMap被修改了,ConcurrentHashMap是不会抛出ConcurrentModificationException异常的。迭代器不能被超过一个以上的线程使用。

查看官方文档获取ConcurrentMap和ConcurrentHashMap更详细的信息。

ConcurrentMap实例

ConcurrentMap concurrentMap = new ConcurrentHashMap();concurrentMap.put("key", "value");Object value = concurrentMap.get("key");

ConcurrentNavigableMap

java.util.concurrent.ConcurrentNavgableMap接口类是一种支持并行访问的java.util.NavigableMap,并且它的子map也支持并行访问,子map是通过headMap(),subMap()和tailMap()等方法返回的。

这里不重新解释NavigableMap中已有的相同方法,我们仅看看在ConcurrentNavigableMap中增加的一些方法。

haedMap()

headMap(T toKey) 返回一个包含许多键的map,其中所有键值是严格少于给定的toKey。

如果你改变了原始的map,这些改变也会反映到head map上。

下面的例子说明了headMap()方法的使用。

ConcurrentNavigableMap map = new ConcurrentSkipListMap();map.put("1", "one");map.put("2", "two");map.put("3", "three");ConcurrentNavigableMap headMap = map.headMap("2");

headMap将会指向一个仅仅包含key为“1”的ConcurrentNavigableMap,因为只有这个key是严格小于“2”的。ConcurrentSkipListMap是ConcurrentNavigableMap的实现类。

查看JavaDoc了解这个方法以及它的重载版本更详细的执行情况。

tailMap()

tailMap(T fromKey)返回一个包含许多键的map,其中所有键值是大于或者等于给定的fromKey的。

如果你改变了原始的map,这些改变也会反映到head map上。

下面的例子说明了tailMap()方法的使用。

ConcurrentNavigableMap map = new ConcurrentSkipListMap();map.put("1", "one");map.put("2", "two");map.put("3", "three");ConcurrentNavigableMap tailMap = map.tailMap("2");

tailMap将包含“2”、“3”两个键,因为这两个键是大于或者等于给定的键值“2”。 

查看JavaDoc了解这个方法以及它的重载版本更详细的执行情况。

subMap()

subMap()方法返回一个包含许多键的map,这些键值是介于传给该方法的(including)和(excluding)两个参数之间的,下面是一个例子:

ConcurrentNavigableMap map = new ConcurrentSkipListMap();map.put("1", "one");map.put("2", "two");map.put("3", "three");ConcurrentNavigableMap subMap = map.subMap("2", "3");

方法返回的subMap仅包含一个key等于“2”的键值对,因为只有这个键是大于或等“2”,并且小于“3”的。

更多方法

ConcurrentNavigableMap接口还包含跟多的一些方法也许会用到的,例如:

  • descendingKeySet()
  • descendingMap()
  • navigableKeySet()

更多信息请查看官方JavaDoc。

 

转载地址:https://maokun.blog.csdn.net/article/details/80617860 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍
下一篇:Java集合之EnumSet

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月17日 11时11分00秒