是否需要仅增量计数器的同步?

时间:2011-10-04 10:08:43

标签: java synchronization counter increment

我使用整数作为计数器。整数只会增加,肯定会有多个线程同时增加它。在没有其他线程尝试访问其值时,在程序执行结束时读取此计数器的值。

我认为我不必为这种仅增量计数器使用锁或任何类型的同步。这是正确的吗? 如果这有任何区别,我用Java编写代码。

1 个答案:

答案 0 :(得分:67)

如果您刚使用了intlong变量,那么需要同步 - 递增涉及读取/递增本地/写入,这远非原子操作。 (即使变量为volatile以避免内存模型关注陈旧性,您仍然会有三个不同的操作,可能会在任何一对之间被抢占。)

幸运的是,Java提供了AtomicIntegerAtomicLong 可以使用而无需任何同步:

private final AtomicLong counter = new AtomicLong();

...

counter.incrementAndGet(); // No need for synchronization