首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

int/long变量的赋值,究竟是不是原子操作吗

2014-01-12 
int/long变量的赋值,到底是不是原子操作吗? 常见的说法就是说int类型没问题,但long类型8字节,可能一个线程

int/long变量的赋值,到底是不是原子操作吗?
 
常见的说法就是说int类型没问题,但long类型8字节,可能一个线程赋值时,刚写完4字节,另一线程就已经读取了,所以说不是原子操作。

而我看到JDK的AtomicLong类中的set()方法,是直接赋值,没有什么同步之类的操作,那么多线程操作AtomicLong,岂不是会出现刚才说的那种情况?
    public final void set(long newValue) {
        value = newValue;
    }
[解决办法]
JDK说明:
public class AtomicLong
extends Number
implements Serializable
可以用原子方式更新的 long 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicLong 可用在应用程序中(如以原子方式增加的序列号),并且不能用于替换 Long。但是,此类确实扩展了 Number,允许那些处理基于数字类的工具和实用工具进行统一访问。

AtomicLong是原子的,Long不是原子操作的。
[解决办法]
int 赋值怎么不是原子的。

不同步的是代码块。

热点排行