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