volatile详解

特性:

1、可见性

每个线程都是将共享变量复制到自己的高速缓存空间里的,是每个线程修改后,然后再同步到内存空间。volatile会让线程直接读取内存空间里的变量值,从而解决由于高速缓存空间带来的并发问题

2、有序性

java执行会存在指令重排序的情况,执行第二行代码时不一定会等待第一行代码完全执行完毕,所以会存在一定的并发问题。
volatile会确保变量之前的代码都执行完毕后才执行。

3、volatile不能完全确保线程安全。

因为java执行时不能确保原子性,例如:
i=i+1 会分解成3步:
(1)获取i的值
(2)计算i=i+1
(3)回写i到内存

线程1读取了t的值,假如t = 0。之后线程2读取了t的值,此时t = 0。
然后线程1执行了加1的操作,此时t = 1。但是这个时候,处理器还没有把t = 1的值写回主存中。这个时候处理器跑去执行线程2,注意,刚才线程2已经读取了t的值,所以这个时候并不会再去读取t的值了,所以此时t的值还是0,然后线程2执行了对t的加1操作,此时t =1 。
这个时候,就出现了线程安全问题了,两个线程都对t执行了加1操作,但t的值却是1。所以说,volatile关键字并不一定能够保证变量的安全性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值