synchronized map的value
大家好,想請教各位前輩一個問題
今天我有一個map
Map<String, List<Integer>> map = new HashMap<>();
有一個function void safeAdd(String key, Integer value),
這個safeAdd方法要做的事情是 map.get(key).add(value) ,這邊先不用考慮list 是null
請問要如何做才能達到有效率而且是執行緒安全,以下是我的想法
1. 如果是synchronized safeAdd()這樣雖然安全,但是沒效率,因為就算不同key 也會要等別的key 完成才能進入
2. 同上,用ConcurrentHashMap一樣有這個問題
3. 在safeAdd 裡面 先 list A = map.get(key) ,再用synchronized (A) { A.add(value) } ,這是我覺得比較好的作法,但是IntelliJ給我警告說synchronization on local variable,但是get 出來的應該是物件的參考,這樣會有問題嗎
4. 同上,在方法裡面改用 synchronized (map.get(key)) {map.get(key).add(value)}
5. 不考慮用BlockingQueue 或 Vector,因為在safeAdd 裡面會有其他對list 的操作,例如用size() 去控制list的長度,我希望這個safeAdd被使用的時候同一時間只有單一執行緒對一個key 裡面的list 做操作。
我目前是使用4,我有測試過而且看起來是沒問題,但是還是怕有什麼意外因此上來發問,再麻煩各位幫我解答,謝謝。
-----
Sent from JPTT on my iPhone
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.104.153.116 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/java/M.1639702666.A.CD7.html
推
12/17 09:55,
3年前
, 1F
12/17 09:55, 1F
→
12/17 09:56,
3年前
, 2F
12/17 09:56, 2F
→
12/17 09:56,
3年前
, 3F
12/17 09:56, 3F
→
12/17 09:56,
3年前
, 4F
12/17 09:56, 4F
→
12/17 09:56,
3年前
, 5F
12/17 09:56, 5F
→
12/17 09:56,
3年前
, 6F
12/17 09:56, 6F
→
12/17 10:05,
3年前
, 7F
12/17 10:05, 7F
→
12/17 10:05,
3年前
, 8F
12/17 10:05, 8F
→
12/17 10:05,
3年前
, 9F
12/17 10:05, 9F
推
12/17 11:12,
3年前
, 10F
12/17 11:12, 10F
→
12/17 11:12,
3年前
, 11F
12/17 11:12, 11F
→
12/17 13:00,
3年前
, 12F
12/17 13:00, 12F
→
12/17 13:02,
3年前
, 13F
12/17 13:02, 13F
→
12/17 13:03,
3年前
, 14F
12/17 13:03, 14F
→
12/17 13:16,
3年前
, 15F
12/17 13:16, 15F
→
12/17 13:16,
3年前
, 16F
12/17 13:16, 16F
→
12/17 14:40,
3年前
, 17F
12/17 14:40, 17F
→
12/17 14:44,
3年前
, 18F
12/17 14:44, 18F
→
12/17 14:45,
3年前
, 19F
12/17 14:45, 19F
→
12/17 14:46,
3年前
, 20F
12/17 14:46, 20F
→
12/17 14:47,
3年前
, 21F
12/17 14:47, 21F
→
12/17 14:49,
3年前
, 22F
12/17 14:49, 22F
→
12/17 14:54,
3年前
, 23F
12/17 14:54, 23F
→
12/17 14:55,
3年前
, 24F
12/17 14:55, 24F
→
12/17 15:43,
3年前
, 25F
12/17 15:43, 25F
→
12/22 01:37,
2年前
, 26F
12/22 01:37, 26F
→
12/22 01:37,
2年前
, 27F
12/22 01:37, 27F
→
01/08 21:46,
3年前
, 28F
01/08 21:46, 28F
java 近期熱門文章
PTT數位生活區 即時熱門文章