當前位置:首頁 » 編程語言 » java並發map

java並發map

發布時間: 2022-03-30 02:16:45

『壹』 java中線程安全的map有哪些

JAVA中線程安全的map有:Hashtable、synchronizedMap、ConcurrentHashMap。

java中map中線程安全怎麼實現:

  1. 同步的map就是Hashtable, concurrenthashmap。

  2. 你看到的Hashtable就是直接在hashmap上加了個鎖,concurrenthashmap就是分成多個分段鎖。

『貳』 java中 map嵌套map性能問題,消耗會很大嗎

只要用到map,相對都不比較慢的,嵌套更慢

現在CPU都那麼勁,其實都不會太在意這個消耗的

『叄』 java專用於並發的map

ConcurrentHashMap
基於hash演算法的,線程安全的HashMap,並發版本的HashTable
內部採用鎖分段形式進行優化。

『肆』 java中map有哪幾種實現方式,並且比較異同

Map是一種把鍵對象和值對象進行關聯的容器,而一個值對象又可以是一個Map,依次類推,這樣就可形成一個多級映射。對於鍵對象來說,像Set 一樣,一個Map容器中的鍵對象不允許重復,這是為了保持查找結果的一致性;如果有兩個鍵對象一樣,那你想得到那個鍵對象所對應的值對象時就有問題了,可 能你得到的並不是你想的那個值對象,結果會造成混亂,所以鍵的唯一性很重要,也是符合集合的性質的。當然在使用過程中,某個鍵所對應的值對象可能會發生變 化,這時會按照最後一次修改的值對象與鍵對應。對於值對象則沒有唯一性的要求。你可以將任意多個鍵都映射到一個值對象上,這不會發生任何問題(不過對你的 使用卻可能會造成不便,你不知道你得到的到底是那一個鍵所對應的值對象)。
Map有兩種比較常用的實現:HashMap和TreeMap,WeakMap。HashMap 也用到了哈希碼的演算法,以便快速查找一個鍵,TreeMap則是對鍵按序存放,因此它便有一些擴展的方法,比如firstKey(),lastKey() 等,你還可以從TreeMap中指定一個范圍以取得其子Map。鍵和值的關聯很簡單,用pub(Object key,Object value)方法即可將一個鍵與一個值對象相關聯。用get(Object key)可得到與此key對象所對應的值對象,WeakMap這個用於內存自動釋放的。

『伍』 Java 多線程 MAP 同步

1: 有循環操作時,所有對map操作放到synchronized 塊里。
synchronized (map) {
//操作
}

2:沒有循環操作時可以直接使用這個方法,然後象普通map一樣使用就行。

Collections.synchronizedMap(new HashMap());

『陸』 java中幾種Map在什麼情況下使用,並簡單介紹原因及原理

一、Map用於保存具有映射關系的數據,Map里保存著兩組數據:key和value,它們都可以使任何引用類型的數據,但key不能重復。所以通過指定的key就可以取出對應的value。Map介面定義了如下常用的方法:
1、void clear():刪除Map中所以鍵值對。
2、boolean containsKey(Object key):查詢Map中是否包含指定key,如果包含則返回true。
3、boolean containsValue(Object value):查詢Map中是否包含指定value,如果包含則返回true。
4、Set entrySet():返回Map中所包含的鍵值對所組成的Set集合,每個集合元素都是Map.Entry對象(Entry是Map的內部類)。
5、Object get(Object key):返回指定key所對應的value,如Map中不包含key則返回null。
6、boolean isEmpty():查詢Map是否為空,如果空則返回true。
7、Set keySet():返回該Map中所有key所組成的set集合。
8、Object put(Object key,Object value):添加一個鍵值對,如果已有一個相同的key值則新的鍵值對覆蓋舊的鍵值對。
9、void putAll(Map m):將指定Map中的鍵值對復制到Map中。
10、Object remove(Object key):刪除指定key所對應的鍵值對,返回可以所關聯的value,如果key不存在,返回null。
11、int size():返回該Map里的鍵值對的個數。
12、Collection values():返回該Map里所有value組成的Collection。
Map中包含一個內部類:Entry。該類封裝了一個鍵值對,它包含了三個方法:
1、Object getKey():返回該Entry里包含的key值。
2、Object getValeu():返回該Entry里包含的value值。
3、Object setValue(V value):設置該Entry里包含的value值,並返回新設置的value值。

二、HashMap和Hashtable實現類:
1、HashMap與HashTable的區別:
1) 同步性:Hashtable是同步的,這個類中的一些方法保證了Hashtable中的對象是線程安全的。而HashMap則是非同步的,因此HashMap中的對象並不是線程安全的。因為同步的要求會影響執行的效率,所以如果你不需要線程安全的集合那麼使用HashMap是一個很好的選擇,這樣可以避免由於同步帶來的不必要的性能開銷,從而提高效率。
2) 值:HashMap可以讓你將空值作為一個表的條目的key或value,但是Hashtable是不能放入空值的。HashMap最多隻有一個key值為null,但可以有無數多個value值為null。
2、性能:HashMap的性能最好,HashTable的性能是最差(因為它是同步的)
3、注意:
1)用作key的對象必須實現hashCode和equals方法。
2)不能保證其中的鍵值對的順序
3)盡量不要使用可變對象作為它們的key值。

三、LinkedHashMap:
它的父類是HashMap,使用雙向鏈表來維護鍵值對的次序,迭代順序與鍵值對的插入順序保持一致。LinkedHashMap需要維護元素的插入順序,so性能略低於HashMap,但在迭代訪問元素時有很好的性能,因為它是以鏈表來維護內部順序。

四、TreeMap:
Map介面派生了一個SortMap子介面,SortMap的實現類為TreeMap。TreeMap也是基於紅黑樹對所有的key進行排序,有兩種排序方式:自然排序和定製排序。Treemap的key以TreeSet的形式存儲,對key的要求與TreeSet對元素的要求基本一致。
1、Map.Entry firstEntry():返回最小key所對應的鍵值對,如Map為空,則返回null。
2、Object firstKey():返回最小key,如果為空,則返回null。
3、Map.Entry lastEntry():返回最大key所對應的鍵值對,如Map為空,則返回null。
4、Object lastKey():返回最大key,如果為空,則返回null。
5、Map.Entry higherEntry(Object key):返回位於key後一位的鍵值對,如果為空,則返回null。
6、Map.Entry lowerEntry(Object key):返回位於key前一位的鍵值對,如果為空,則返回null。
7、Object lowerKey(Object key):返回位於key前一位key值,如果為空,則返回null。
8、NavigableMap subMap(Object fromKey,boolean fromlnclusive,Object toKey,boolean toInciusive):返回該Map的子Map,其key范圍從fromKey到toKey。
9、SortMap subMap(Object fromKey,Object toKey );返回該Map的子Map,其key范圍從fromkey(包括)到tokey(不包括)。
10、SortMap tailMap(Object fromkey ,boolean inclusive):返回該Map的子Map,其key范圍大於fromkey(是否包括取決於第二個參數)的所有key。
11、 SortMap headMap(Object tokey ,boolean inclusive):返回該Map的子Map,其key范圍小於tokey(是否包括取決於第二個參數)的所有key。

五、WeakHashMap:
WeakHashMap與HashMap的用法基本相同,區別在於:後者的key保留對象的強引用,即只要HashMap對象不被銷毀,其對象所有key所引用的對象不會被垃圾回收,HashMap也不會自動刪除這些key所對應的鍵值對對象。但WeakHashMap的key所引用的對象沒有被其他強引用變數所引用,則這些key所引用的對象可能被回收。WeakHashMap中的每個key對象保存了實際對象的弱引用,當回收了該key所對應的實際對象後,WeakHashMap會自動刪除該key所對應的鍵值對。

六、IdentityHashMap類:
IdentityHashMap與HashMap基本相似,只是當兩個key嚴格相等時,即key1==key2時,它才認為兩個key是相等的 。IdentityHashMap也允許使用null,但不保證鍵值對之間的順序。

七、EnumMap類:
1、EnumMap中所有key都必須是單個枚舉類的枚舉值,創建EnumMap時必須顯示或隱式指定它對應的枚舉類。
2、EnumMap根據key的自然順序,即枚舉值在枚舉類中定義的順序,來維護鍵值對的次序。
3、EnumMap不允許使用null作為key值,但value可以。

『柒』 java concurrent map能鎖住整個map嗎

鎖不住,concurrentmap的鎖粒度不是整個map,而是裡面的segment,也就是一段段的。提高並發效率。

『捌』 java中map中線程安全怎麼實現

同步的map就是Hashtable,
concurrenthashmap.
你看到的Hashtable就是直接在hashmap上加了個鎖,concurrenthashmap就是分成多個分段鎖。

『玖』 java 怎麼實現並發hashmap

如果需要使 Map 線程安全,大致有這么四種方法:
1、使用 synchronized 關鍵字,代碼如下
synchronized(anObject) {
value = map.get(key);
}

2、使用 JDK1.5提供的鎖(Java.util.concurrent.locks.Lock)。代碼如下
lock.lock();
value = map.get(key);
lock.unlock();

3、使用 JDK1.5 提供的讀寫鎖(java.util.concurrent.locks.ReadWriteLock)。代碼如下
rwlock.readLock().lock();
value = map.get(key);
rwlock.readLock().unlock();
這樣兩個讀操作可以同時進行,理論上效率會比方法 2 高。

4、使用 JDK1.5 提供的 java.util.concurrent.ConcurrentHashMap 類。該類將 Map 的存儲空間分為若干塊,每塊擁有自己的鎖,大大減少了多個線程爭奪同一個鎖的情況。代碼如下
value = map.get(key); //同步機制內置在 get 方法中
其中ConcurrentHashMap是最好最快的

『拾』 java concurrenthashmap和hashmap的區別

最大的區別就是ConcurrentHashMap是線程安全的,hashMap不是線程安全的。
為什麼線程安全呢:
ConcurrentHashMap代碼中可以看出,它引入了一個「分段鎖」的概念,具體可以理解為把一個大的Map拆分成N個小的HashTable,根據key.hashCode()來決定把key放到哪個HashTable中。
在ConcurrentHashMap中,就是把Map分成了N個Segment,put和get的時候,都是現根據key.hashCode()算出放到哪個Segment中:

熱點內容
一機一碼文件加密 發布:2025-01-16 17:36:19 瀏覽:415
軟體登錄密碼用戶名是什麼 發布:2025-01-16 17:11:52 瀏覽:111
我的世界建伺服器該注意什麼 發布:2025-01-16 17:06:40 瀏覽:568
php隨機小數 發布:2025-01-16 17:02:48 瀏覽:139
linuxterminal 發布:2025-01-16 17:02:04 瀏覽:249
如何配置i5的電腦 發布:2025-01-16 17:00:21 瀏覽:264
壓縮空氣泄漏 發布:2025-01-16 16:55:51 瀏覽:259
皖教育密碼是多少 發布:2025-01-16 16:50:59 瀏覽:451
有專用dhcp伺服器無法獲取ip 發布:2025-01-16 16:48:58 瀏覽:810
c語言找出迴文數 發布:2025-01-16 16:46:26 瀏覽:414