Ответ 1
Если вы просто использовали переменную int
или long
, тогда вам понадобится синхронизация - приращение включает чтение/инкремент-локально/запись, что далека от атомной операции. (Даже если переменная volatile
, чтобы избежать проблем с моделью памяти, вы все равно должны иметь три отдельных операции с возможностью упреждения между любыми их парами.)
К счастью, Java предоставляет AtomicInteger
и AtomicLong
, который можно использовать без какой-либо синхронизации:
private final AtomicLong counter = new AtomicLong();
...
counter.incrementAndGet(); // No need for synchronization