Поскольку вы всегда увеличиваете counter
, когда используете его в качестве ключа для ввода на эту карту:
map.put(counter++, tmp);
, когда вы приходите, чтобы прочитать его снова:
return sum / map.get(counter);
map.get(counter)
будет null
, так что это приводит к NPE (если вы не положите более 2 ^ 32 вещей на карту, ofc).(Я предполагаю, что вы имеете в виду sum.get()
, иначе он не будет компилироваться).
Таким образом, вы можете иметь эквивалентную функциональность без каких-либо блокировок:
class SomeClass {
public void put(String some) { /* do nothing */ }
public Double get() {
throw new NullPointerException();
}
}
Выдействительно не удалось решить проблему с вашим edit .divisor
по-прежнему будет нулевым, поэтому эквивалентная функциональность без блокировок будет:
class SomeClass {
private final AtomicInteger sum = new AtomicInteger(0);
public void put(String some) {
sum.getAndAdd(Integer.parseInt(some));
}
public Double get() {
return sum.get();
}
}