文章译自:http://tutorials.jenkov.com/java-util-concurrent/index.html
抽空翻译了一下这个教程的文章,后面会陆续放出,如有不妥,请批评指正。
转自请注明出处。
之前漏了一篇文章,这篇应该是在双端队列之后的,这里补上。
java.util.concurrent.ConcurrentMap接口代表一个Map,它可以处理并发访问。ConcurrentMap除了继承自java.util.Map的方法,还有一些自己的原子方法。
由于ConcurrentMap是一个接口类,使用时需要使用它的实现类。Java.util.concurrent包中有下面关于ConcurrentMap接口的实现类。
ConcurrentHashMap除了有更好的并行性,它与java.util.HashTable类时非常相似的。当你从ConcurrentHashMap读取数据的时候ConcurrentHashMap是不会加锁的。另外,ConcurrenthashMap在写的时候不会全部加锁。它仅仅锁住Map中正在被写入的部分。
ConcurrentHashMap的另一个不同之处是,如果在迭代的时候ConcurrentHashMap被修改了,ConcurrentHashMap是不会抛出ConcurrentModificationException异常的。迭代器不能被超过一个以上的线程使用。
查看官方文档获取ConcurrentMap和ConcurrentHashMap更详细的信息。
ConcurrentMap concurrentMap = new ConcurrentHashMap();
concurrentMap.put("key", "value");
Object value = concurrentMap.get("key");
java.util.concurrent.ConcurrentNavgableMap接口类是一种支持并行访问的java.util.NavigableMap,并且它的子map也支持并行访问,子map是通过headMap(),subMap()和tailMap()等方法返回的。
这里不重新解释NavigableMap中已有的相同方法,我们仅看看在ConcurrentNavigableMap中增加的一些方法。
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(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()方法返回一个包含许多键的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接口还包含跟多的一些方法也许会用到的,例如:
更多信息请查看官方JavaDoc。