2014-02-06 35 views
0

以下是從ConcurrentHashMap的的ConcurrentHashMap操作

的Java文檔的某些行該類服從相同的功能規範的哈希表,和 包括對應於哈希表 的每個方法的方法的版本。但是,儘管所有操作都是線程安全的,但 檢索操作不需要鎖定,也不存在支持以阻止所有訪問的方式鎖定整個表的任何操作。

什麼是聲明

儘管所有操作都是線程安全的

從上面一段的含義是什麼? 任何人都可以解釋put()或get()方法的任何示例嗎?

+1

你想向你解釋線程安全嗎? –

+0

是的,我想線程安全解釋給我,但在這種情況下get()和put()。 –

+0

沒有什麼具體的get()和put()。他們是兩個線程安全的操作。 –

回答

1

ConcurrentHashMap允許從多個線程同時修改Map,而無需阻止它們。 Collections.synchronizedMap(map)會創建一個阻塞映射,這會降低性能,儘管確保一致性(如果使用得當)。

如果需要確保數據一致性,並且每個線程都需要有最新的地圖視圖,請使用第二個選項。如果性能至關重要,則使用第一個線程,並且每個線程只將數據插入到地圖中,而讀取發生的頻率較低。

+0

它有什麼幫助嗎? –

+0

你的答案明確了一些觀點,但它不能回答我的問題。 –

+0

這就是我可以幫助,我希望有更多,對不起。 –

0

你的問題很奇怪。如果你明白什麼是「線程安全」,那麼你就可以理解它是如何適用於你自己的get()和put()。如果你不懂線程安全,那就沒有必要特別解釋get()和put()。你確定這不是一個家庭作業問題嗎?

然而,無論如何回答你的問題,ConcurrentHashMap是線程安全的這一事實意味着如果你有多個線程同時在同一個地圖上執行put(),那麼:a)內部不會發生任何損害映射的數據結構和:b)其他一個執行get()的線程會看到其他線程放入的所有值。使用非線程安全的Map(如HashMap),都不能保證。