据我了解,原子操作是不可分割的,一个线程可以在线程2更改之前或在线程2进行更改之后看到系统状态,但是不能在两者之间看到。
例如说我在2个线程之间的共享对象上有一个方法:
public void incrementMe() {
//incrementing a shared int for this example
atomicInt.incrementAndGet();
}
例如,我们的原子int的初始值为5。现在线程1和线程2都同时调用了增量我。会发生什么?据我了解,线程1将看到值5并同时将其递增到6线程2将看到值5,因为增量是原子的,因此线程2可以在after之后更改但在两者之间没有看到值,因此它可以看到值将其增加到6,最后我将得到6而不是7的值。对吗?我想念东西吗?
预先谢谢你
那是不对的。根据定义,原子是在一次操作中完成的。JVM在后台使用该Unsafe.compareAndSwap
方法,该方法对单个处理器指令进行建模,该指令将增加值而无需担心先占。因此,线程1将值增加到6,线程2将值增加到7。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句