我使用整数作为计数器。整数只会增加,肯定会有多个线程同时增加它。在没有其他线程尝试访问其值时,在程序执行结束时读取此计数器的值。
我认为我不必为这种仅增量计数器使用锁或任何类型的同步。这是正确的吗? 如果这有任何区别,我用Java编写代码。
答案 0 :(得分:67)
如果您刚使用了int
或long
变量,那么将需要同步 - 递增涉及读取/递增本地/写入,这远非原子操作。 (即使变量为volatile
以避免内存模型关注陈旧性,您仍然会有三个不同的操作,可能会在任何一对之间被抢占。)
幸运的是,Java提供了AtomicInteger
和AtomicLong
可以使用而无需任何同步:
private final AtomicLong counter = new AtomicLong();
...
counter.incrementAndGet(); // No need for synchronization