簡體   English   中英

java Integer 的 ConcurrentHashMap 與 AtomicInteger 的 HashMap 與 AtomicInteger 的 ConcurrentHashMap

[英]java ConcurrentHashMap of Integer vs HashMap of AtomicInteger vs ConcurrentHashMap of AtomicInteger

我對 java 中的並發數據結構有疑問,具體來說:

1) ConcurrentHashMap<String, Integer>
2) HashMap<String, AtomicInteger>
3) ConcurrentHashMap<String, AtomicInteger>

如果我理解正確:

1)讀/寫是線程安全的,只有一個線程可以對一對執行寫操作(所有線程都應該允許讀取),所以如果另一個線程要修改另一對(與以前不同)必須等待獲取鎖.

2)每個線程都可以訪問 AtomicInteger 值(肯定是為了讀取),但是兩個線程可以同時修改不同的一對。

3)我認為從邏輯角度來看與第一種情況相同

以上三種數據結構的主要區別是什么?

在每個線程應該同時增加/減少 integer 值的多線程情況下,最好的選擇是什么?

當您向 map 添加/刪除項目時,可以從多個線程安全地使用 ConcurrentHashMap。 HashMap 不是。 多個線程可以讀取但只有一個可以寫入,並且在寫入期間沒有其他線程應該讀取。

將 AtomicInteger 作為 hashmap 的值允許多個線程安全地修改 map 中的值。

所以:如果你的 map 是 static (一旦你構建了它,你就不會添加/刪除任何東西),一個 HashMap 與 AtomicInteger 一起使用是安全的。

如果您向 map 添加/刪除項目,請使用 ConcurrentHashMap。 如果使用 Integer,則必須將值設置為 map 才能對其進行修改。 如果您使用 AtomicInteger,您可以簡單地設置 integer 值。

暫無
暫無

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

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