我有一個靜態 hashMap,與多個線程共享。我不是在迭代地圖,也不關心地圖的大小。我只在地圖中使用get, put, remove。每個線程都可以調用someClass.track(true)或someClass.track(false)。我想跟蹤一個線程何時進入一個方法(遞增 #)并退出每個線程的一個方法(遞減 #)。僅使用 HashMap 就足夠了嗎?或者我必須使用 ConcurrentHashMap 來保證從track方法中獲得正確的值?該方法看起來像這樣private static Map<Long, Integer> TRACKER = new HashMap<Long,Integer>();public static Integer track(boolean b) { long tid = Thread.currentThread().getId(); if (b) { if (TRACKER.containsKey(tid)) { TRACKER.put(tid, TRACKER.get(tid) + 1); } else { TRACKER.put(tid, 1); } } else { Integer n = TRACKER.get(tid); if (n != null) { n = n -1; if (n == 0) { TRACKER.remove(tid); } else { TRACKER.put(tid, n); } } } return TRACKER.get(tid); }
如果我只以線程 id 為鍵調用 get、put、remove 并且從不迭代映射
慕田峪7331174
2021-09-03 21:30:43