java内存模型与happens-before的关系

什么是happens-before
  • Java5引入了明确定义的Java内存模型。其中最重要的一个概念就是happens-before关系。happens-before关系是用来描述两个操作的内存可见性的。如果操作X happens-before操作Y,那么X的操作结果对于Y是可见。
同一个线程中,字节码的先后顺序也暗含了happens-before关系
  • 在程序控制流中靠前的字节码happens-before靠后的字节码。然而,这并不意味着前者一定在后者之前执行。实际上,如果后者没有观测前者的云心结果,即后者没有依赖于前者,那么他们可能会被重排序。
除了线程内的happens-before关系之外,Java内存模型还定义了下述线程间的happens-before关系
  • 1、解锁操作happens-before之后(时钟顺序先后)对同一把的加锁操作。
  • 2、volatile字段的写操作happens-before之后(时钟顺序先后)对同一个字段的读操作。
  • 3、线程的启动操作(即thread.start())happens-before该线程的第一个操作。
  • 4、线程的最后一个操作happens-before他的终止事件(即其他线程通过Thread.isAlive()或者Thread.join()判断该线程是否终止)
happens-before具有传递性
  • 如果X happens-before Y,而操作Yhappens-before Z,那么Xhappens-before Z
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值