簡體   English   中英

為什么無法鎖定ConcurrentHashMap以進行獨占訪問?

[英]Why ConcurrentHashMap cannot be locked for exclusive access?

來自#JCIP的引用:

“由於ConcurrentHashMap無法被鎖定以進行獨占訪問,因此我們無法使用客戶端鎖定來創建新的原子操作,例如put-if-absent,就像我們為Vector所做的那樣”

為什么我們不能只是獲取以實現其他原子方法並保持集合線程安全 (如Collections.synchronizedxxx工廠返回的同步集合):

ConcurrentHashMap的重點是讀操作永遠不會阻塞,即不必檢查鎖。 這就排除了擁有這種鎖定的能力。

為什么我們不能只獲得鎖定:

你可以這樣做,但你必須為地圖的所有訪問路徑一致地做,然后你完全否定了並發數據結構的目的。 它應該是無鎖的。

為什么? 因為實現不支持它。 直接來自ConcurrentHashMap JavaDocs:

沒有任何支持以阻止所有訪問的方式鎖定整個表

......根據定義,“獨家訪問”。

您編寫的代碼是您的實現,如果您以這種方式使用它,那么所有其他操作必須以這種方式工作,即所有操作必須獲得相同的鎖。

但這里的要點是java沒有為此提供ConcurrentHashMap ,其目的是允許多個線程同時工作。

根據您的要求,選擇HashTable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM