Современная Java по-прежнему использует те же основные принципы безопасности потоков.У вас есть сценарий check-then-act , который охватывает практически весь метод.Таким образом, вы можете сделать метод synchronized
:
public synchronized Holder incrementForKeyMultipleThreads(String key) {
if (globalCounter.get() < 1000) {
globalCounter.increment();
return new Holder(counterPerKey.merge(key, 1, Integer::sum));
}
return null;
}
И затем, если это единственное место, которое вы используете (чтение или запись) globalCounter
, вы можете изменить его на int
.