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)
| 归档时间: |
|
| 查看次数: |
18124 次 |
| 最近记录: |