java.util.concurrent.atomic包的javadoc说明如下:
一个小型工具包,支持对单个变量进行无锁线程安全编程.
但我没有在任何AtomicInteger或AtomicBoolean类中看到任何线程安全(同步或锁定)代码.
那么,这两个是相同的:
1.
int i;
synchronized(this){i++;}
Run Code Online (Sandbox Code Playgroud)
2.
AtomicInteger i = new AtomicInteger();
i.getAndIncrement();
Run Code Online (Sandbox Code Playgroud)
更新:感谢您的回答.使用AtomicInteger时是否需要volatile?
Joh*_*int 17
他们会提供相同的原子性.你必须要注意的唯一事情是你读的时候你必须用同步包装它
synchronized(this){ return i;}
Run Code Online (Sandbox Code Playgroud)
编辑以回答您的修改:
AtomicInteger不需要易失性.要证明声明AtomicInteger最终.您需要AtomicInteger易失的唯一原因是AtomicInteger字段本身是否发生变化.相近:
volatile AtomicInteger i = new AtomicInteger(0);
public void work(){
i.incrementAndGet();
//...do some other stuff
i = new AtomicInteger(10);//because the field i is changing the field needs to be volatile
}
Run Code Online (Sandbox Code Playgroud)
你可以想象不应该这样,所以你不必担心这个领域是不稳定的.
它们在功能上是等价的,但有一个微妙的区别.synchronized具有获取和释放监视器的开销this,同时AtomicInteger使用本机方法调用实现,因此它将显着更快.
| 归档时间: |
|
| 查看次数: |
15645 次 |
| 最近记录: |