java并发(四):volitale和happen-before原则

1.valatile保证可见性

在这里插入图片描述

2.写屏障

写屏障保证写完前后的数据都刷新到了主存,这样主存中去读取的数据都是最新的数据(不会存在脏数据)。
在这里插入图片描述

3.读屏障

读屏障保证读取之前的数据是最新的数据。
在这里插入图片描述

4.valitale无法保证原子性

修改数据分为3步:
1.读取count
2.count++
3.回写count

因为有可能线程1拿到count阻塞,线程2就算拿到最新的数据,但是线程1进行count++,线程2也会进行count++,无法保证原子性。

5.volatile的使用

volatile适合保证用于标识某个操作是否结束。因为判断之前读取的数据都是最新的。
在这里插入图片描述

6.有序性:happens-before原则

1.程序次序规则:一个线程内,按照代码的顺序,书写在前面的操作先行发生于后面操作。(单线程有效,指代码执行顺序,不代表不代表不可以指令重排)
2.锁规则:一个unLock操作先行发生于后面对于同一个锁lock的操作。
3.volatile变量规则:面对这个变量的写操作先行发生于这个变量的读操作。
4.传递规则:如果操作A发生先于操作B,操作B发生先于操作C,那么操作A先于操作C。
5.线程启动规则:Thread的start()操作优先于此线程的其他所有的操作
6.线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生。
7.线程终止原则:线程中的中所有操作都先行发生于现成的终止操作,我们可以通过thread.jion()和thread.isAlive()的返回值来检测代码执行结束
8.对象终结原则:一个对象的初始化先行发生于它的finalize()的开始

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值