Java并发编程:volatile关键字解析

请复制后面的链接在新的网页端打开,直接没法链接到,不过 文章非常详细 ,希望耐心阅读

Java并发编程:volatile关键字解析 - Matrix海子 - 博客园

1、Java 中能创建 volatile 数组吗?

能。Java中可以创建volatile类型数组,只不过是一个指向数组的引用,而不是整个数组。
如果改变引用指向的数组,将会受到volatile的保护,但是如果多个线程同时改变数组元素,
volatile标识符就不会起到保护作用了。

2、volatile 能使得一个非原子操作变成原子操作吗?

Java中该成员变量会被多个线程操时,最好将其设置为volatile。
例如Java中long类型变量不是原子的,需要分成两步,如果一个线程在修改long变量的值,
另一个线程只能看到该值的一半(前32位)。
所以,对于一个volatile修饰的double和long类型的变量,读写就是原子的。

3、volatile 类型变量提供什么保证?

volatile可以保证:

    1、共享数据操作可见性

    2、有序性

    3、禁止指令重新排序

    4、happens-before保证(确保一个线程修改,对其他线程可见)

    【不一定能保证原子性,但是Java中volatile修饰double和long类型数据,就保证了读写的原子性】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值