亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

在Java中如何實(shí)現(xiàn)線程安全的HashMap

P粉602998670
發(fā)布: 2025-10-15 21:54:02
原創(chuàng)
458人瀏覽過(guò)
答案是使用ConcurrentHashMap最推薦,它通過(guò)分段鎖或CAS+synchronized實(shí)現(xiàn)高效線程安全,讀操作不加鎖且支持原子方法;其次可選Collections.synchronizedMap,但遍歷時(shí)需手動(dòng)加鎖;Hashtable因性能差已過(guò)時(shí);手動(dòng)同步易出錯(cuò)不推薦。

在java中如何實(shí)現(xiàn)線程安全的hashmap

在Java中,HashMap本身不是線程安全的,如果多個(gè)線程同時(shí)訪問(wèn)一個(gè)HashMap,并且至少有一個(gè)線程修改了它的結(jié)構(gòu)(比如put、remove),就必須手動(dòng)保證同步,否則可能導(dǎo)致數(shù)據(jù)不一致或死循環(huán)等問(wèn)題。以下是幾種實(shí)現(xiàn)線程安全的HashMap的方法。

1. 使用 Collections.synchronizedMap()

這是最簡(jiǎn)單的方式之一,通過(guò)包裝普通HashMap來(lái)實(shí)現(xiàn)線程安全。

示例代碼:

Map<String, Integer> map = Collections.synchronizedMap(new HashMap<>());
map.put("key1", 1);
int value = map.get("key1");

注意:雖然這個(gè)Map是線程安全的,但在遍歷時(shí)仍需要手動(dòng)加鎖,以防止并發(fā)修改異常。

例如遍歷寫(xiě)法:

立即學(xué)習(xí)Java免費(fèi)學(xué)習(xí)筆記(深入)”;

synchronized(map) {
????for (Map.Entry<String, Integer> entry : map.entrySet()) {
????????System.out.println(entry.getKey() + ": " + entry.getValue());
????}
}

2. 使用 ConcurrentHashMap

推薦方式:ConcurrentHashMap 是專為高并發(fā)場(chǎng)景設(shè)計(jì)的線程安全Map,性能遠(yuǎn)優(yōu)于 synchronizedMap,特別是在讀多寫(xiě)少的場(chǎng)景下。

示例代碼:

ConcurrentHashMap<String, Integer> concurrentMap = new ConcurrentHashMap<>();
concurrentMap.put("key1", 100);
int val = concurrentMap.get("key1");
// 支持原子操作
concurrentMap.putIfAbsent("key2", 200);

優(yōu)點(diǎn):

如知AI筆記
如知AI筆記

如知筆記——支持markdown的在線筆記,支持ai智能寫(xiě)作、AI搜索,支持DeepseekR1滿血大模型

如知AI筆記27
查看詳情 如知AI筆記
  • 采用分段鎖(JDK 7)或CAS+synchronized(JDK 8+),鎖粒度更細(xì)
  • 讀操作不加鎖,性能高
  • 支持豐富的原子操作,如 putIfAbsent、compute、merge 等

3. 使用 Hashtable(已過(guò)時(shí))

Hashtable 是早期的線程安全Map實(shí)現(xiàn),所有方法都用 synchronized 修飾。

示例代碼:

Hashtable<String, Integer> table = new Hashtable<>();
table.put("key1", 50);
int result = table.get("key1");

缺點(diǎn):

  • 性能較差,因?yàn)檎麄€(gè)表被一把鎖控制
  • 不允許 null 鍵和 null 值
  • 已被 ConcurrentHashMap 取代,不推薦新項(xiàng)目使用

4. 手動(dòng)同步(不推薦)

你可以自己用 synchronized 塊包裹HashMap操作,但容易出錯(cuò),且維護(hù)成本高。

synchronized(this) {
????map.put(key, value);
}

這種方式難以保證所有訪問(wèn)路徑都被正確同步,容易遺漏,不建議使用。

基本上就這些。對(duì)于大多數(shù)并發(fā)場(chǎng)景,優(yōu)先選擇 ConcurrentHashMap,它在安全性和性能之間取得了最佳平衡。synchronizedMap適合簡(jiǎn)單場(chǎng)景,而Hashtable應(yīng)避免使用。關(guān)鍵是要根據(jù)實(shí)際并發(fā)需求選擇合適的工具。

以上就是在Java中如何實(shí)現(xiàn)線程安全的HashMap的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件

每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來(lái)源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn
最新問(wèn)題
開(kāi)源免費(fèi)商場(chǎng)系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見(jiàn)反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)