Java并发包:ConcurrentMap
轉(zhuǎn)載自??Java并發(fā)包:ConcurrentMap
?
文章譯自:http://tutorials.jenkov.com/java-util-concurrent/index.html?
抽空翻譯了一下這個(gè)教程的文章,后面會(huì)陸續(xù)放出,如有不妥,請(qǐng)批評(píng)指正。?
轉(zhuǎn)自請(qǐng)注明出處。?
之前漏了一篇文章,這篇應(yīng)該是在雙端隊(duì)列之后的,這里補(bǔ)上。
ConcurrentMap
java.util.concurrent.ConcurrentMap接口代表一個(gè)Map,它可以處理并發(fā)訪問(wèn)。ConcurrentMap除了繼承自java.util.Map的方法,還有一些自己的原子方法。
ConcurrentMap的具體實(shí)現(xiàn)
由于ConcurrentMap是一個(gè)接口類,使用時(shí)需要使用它的實(shí)現(xiàn)類。Java.util.concurrent包中有下面關(guān)于ConcurrentMap接口的實(shí)現(xiàn)類。
- ConcurrentHashMap
ConcurrentHashMap
ConcurrentHashMap除了有更好的并行性,它與java.util.HashTable類時(shí)非常相似的。當(dāng)你從ConcurrentHashMap讀取數(shù)據(jù)的時(shí)候ConcurrentHashMap是不會(huì)加鎖的。另外,ConcurrenthashMap在寫(xiě)的時(shí)候不會(huì)全部加鎖。它僅僅鎖住Map中正在被寫(xiě)入的部分。
ConcurrentHashMap的另一個(gè)不同之處是,如果在迭代的時(shí)候ConcurrentHashMap被修改了,ConcurrentHashMap是不會(huì)拋出ConcurrentModificationException異常的。迭代器不能被超過(guò)一個(gè)以上的線程使用。
查看官方文檔獲取ConcurrentMap和ConcurrentHashMap更詳細(xì)的信息。
ConcurrentMap實(shí)例
ConcurrentMap concurrentMap = new ConcurrentHashMap();concurrentMap.put("key", "value");Object value = concurrentMap.get("key");ConcurrentNavigableMap
java.util.concurrent.ConcurrentNavgableMap接口類是一種支持并行訪問(wèn)的java.util.NavigableMap,并且它的子map也支持并行訪問(wèn),子map是通過(guò)headMap(),subMap()和tailMap()等方法返回的。
這里不重新解釋NavigableMap中已有的相同方法,我們僅看看在ConcurrentNavigableMap中增加的一些方法。
haedMap()
headMap(T toKey) 返回一個(gè)包含許多鍵的map,其中所有鍵值是嚴(yán)格少于給定的toKey。
如果你改變了原始的map,這些改變也會(huì)反映到head map上。
下面的例子說(shuō)明了headMap()方法的使用。
ConcurrentNavigableMap map = new ConcurrentSkipListMap();map.put("1", "one"); map.put("2", "two"); map.put("3", "three");ConcurrentNavigableMap headMap = map.headMap("2");headMap將會(huì)指向一個(gè)僅僅包含key為“1”的ConcurrentNavigableMap,因?yàn)橹挥羞@個(gè)key是嚴(yán)格小于“2”的。ConcurrentSkipListMap是ConcurrentNavigableMap的實(shí)現(xiàn)類。
查看JavaDoc了解這個(gè)方法以及它的重載版本更詳細(xì)的執(zhí)行情況。
tailMap()
tailMap(T fromKey)返回一個(gè)包含許多鍵的map,其中所有鍵值是大于或者等于給定的fromKey的。
如果你改變了原始的map,這些改變也會(huì)反映到head map上。
下面的例子說(shuō)明了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”兩個(gè)鍵,因?yàn)檫@兩個(gè)鍵是大于或者等于給定的鍵值“2”。?
查看JavaDoc了解這個(gè)方法以及它的重載版本更詳細(xì)的執(zhí)行情況。
subMap()
subMap()方法返回一個(gè)包含許多鍵的map,這些鍵值是介于傳給該方法的(including)和(excluding)兩個(gè)參數(shù)之間的,下面是一個(gè)例子:
ConcurrentNavigableMap map = new ConcurrentSkipListMap();map.put("1", "one"); map.put("2", "two"); map.put("3", "three");ConcurrentNavigableMap subMap = map.subMap("2", "3");方法返回的subMap僅包含一個(gè)key等于“2”的鍵值對(duì),因?yàn)橹挥羞@個(gè)鍵是大于或等“2”,并且小于“3”的。
更多方法
ConcurrentNavigableMap接口還包含跟多的一些方法也許會(huì)用到的,例如:
- descendingKeySet()
- descendingMap()
- navigableKeySet()
更多信息請(qǐng)查看官方JavaDoc。
?
總結(jié)
以上是生活随笔為你收集整理的Java并发包:ConcurrentMap的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 服务器电脑配置要求(服务器 电脑配置)
- 下一篇: Java集合之EnumSet