Java并发包:ConcurrentMap
轉載自??Java并發包:ConcurrentMap
?
文章譯自:http://tutorials.jenkov.com/java-util-concurrent/index.html?
抽空翻譯了一下這個教程的文章,后面會陸續放出,如有不妥,請批評指正。?
轉自請注明出處。?
之前漏了一篇文章,這篇應該是在雙端隊列之后的,這里補上。
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。
?
總結
以上是生活随笔為你收集整理的Java并发包:ConcurrentMap的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器电脑配置要求(服务器 电脑配置)
- 下一篇: java美元兑换,(Java实现) 美元