[英]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.