我有一个静态 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);
}
萧十郎
相关分类