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

qin*_*oon 30 java counter synchronization increment

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

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

Jon*_*eet 69

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

幸运的是Java提供了AtomicIntegerAtomicLong可以没有任何同步使用:

private final AtomicLong counter = new AtomicLong();

...

counter.incrementAndGet(); // No need for synchronization
Run Code Online (Sandbox Code Playgroud)

  • @JavaSa:不,我没有在Java上写过任何东西.不过,我完全推荐Josh Bloch的Effective Java. (6认同)