У меня есть класс, который вызывается несколькими потоками на многоядерной машине. Я хочу сделать это потокобезопасным.
add
метод будет вызываться несколькими потоками. И если ключ существует, просто добавьте текущее значение к новому значению, в противном случае просто поместите ключ и значение в карту.
Теперь, чтобы сделать потокобезопасным, я планировал синхронизировать метод add
, но это снизит производительность. Есть ли способ улучшить производительность без синхронизации с методом add
?
class Test {
private final Map<Integer, Integer> map = new ConcurrentHashMap<>();
public void add(int key, int value) {
if (map.containsKey(key)) {
int val = map.get(key);
map.put(key, val + value);
return;
}
map.put(key, value);
}
public Object getResult() {
return map.toString();
}
}