volatile关键字

1、jmm(Java内存模型)
原子性、有序性、可见性;
2、在执行程序时为了提高性能,编译器和处理器会对指令做重排序,synchronized可禁止指令重排序,synchronized编译后会在相关位置前加入monitorenter,后加入monitorexit限制其他线程操作,从而保证原子性,同时在monitorexit之前会把共享数据刷回jmm的主内存保证可见性;
3、volatile:防止指令重排序,volatile保证内存可见性写的内存语义如下:
 当写一个 volatile 变量时,JMM 会把该线程对应的本地内存中的共享变量值刷新到主内存。
volatile 读的内存语义如下:
 当读一个 volatile 变量时,JMM 会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。
但不保证原子性;
4、final:被final修饰的字段在构造器中国一旦初始化完成,并且构造器没有把”this”的引用逃逸出去,那在其他线程中就能看见final字段的值。也就是final可保证可见性
volatile使用条件:
1、对变量的写入操作不依赖变量的当前值,或者只有单个线程更新变量的值;
2、该变量不会与其他状态变量一起纳入不变性条件
3、在访问变量时不需加锁

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值