[英]Why ConcurrentHashMap cannot be locked for exclusive access?
來自#JCIP的引用:
“由於ConcurrentHashMap無法被鎖定以進行獨占訪問,因此我們無法使用客戶端鎖定來創建新的原子操作,例如put-if-absent,就像我們為Vector所做的那樣”
為什么我們不能只是獲取鎖以實現其他原子方法並保持集合線程安全 (如Collections.synchronizedxxx工廠返回的同步集合):
ConcurrentHashMap的重點是讀操作永遠不會阻塞,即不必檢查鎖。 這就排除了擁有這種鎖定的能力。
為什么我們不能只獲得鎖定:
你可以這樣做,但你必須為地圖的所有訪問路徑一致地做,然后你完全否定了並發數據結構的目的。 它應該是無鎖的。
您編寫的代碼是您的實現,如果您以這種方式使用它,那么所有其他操作必須以這種方式工作,即所有操作必須獲得相同的鎖。
但這里的要點是java沒有為此提供ConcurrentHashMap
,其目的是允許多個線程同時工作。
根據您的要求,選擇HashTable
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.