我有一個HashMap如何在這種情況下處理併發?
ConcurrentHashMap<String, Integer> count =new ConcurrentHashMap<String, Integer>();
我會用這樣的:
private Integer somefunction(){
Integer order;
synchronized (this) {
if (count.containsKey(key)) {
order = count.get(key);
count.put(key, order + 1);
} else {
order = 0;
count.put(key, order + 1);
}
}
return order;
}
但正如你所看到的,這可能不是理想的處理併發,因爲只有相同的密鑰下的值可能會干擾彼此不同。不同的密鑰不會互相干擾,因此不需要同步所有操作。我只想在密鑰相同的情況下進行同步。
我可以做些什麼來獲得更好的併發性能嗎? (我知道ConcurrentHashMap和同步在這裏有點多餘,但讓我們關注一下,如果我們只能在密鑰相同時同步)
你能解釋一下你想達到什麼嗎? –
不同的鍵不會互相干擾,因此不需要同步所有操作。我只想在密鑰相同的情況下進行同步。 –
它看起來像你想要的算法是「如果鍵沒有從地圖上,插入一個訂單值爲1,並返回0.如果該項目存在於地圖中,遞增其順序值,並返回之前的值增量。」它是否正確? – mattinbits