首页 > 移动平台 > 详细

happens-before规则

时间:2018-08-09 23:57:49      阅读:260      评论:0      收藏:0      [点我收藏+]

happens-before原则:

  • happens-before它是判断数据是否存在竞争、线程是否安全的主要依据。为了保证线程安全我们可以让2个操作具有happens-before关系
  1. 如果一个操作happens-before与另一个操作,那么第一个操作的结果将对第二个操作可见,而且第一个操作的执行顺序在第二个操作之前,但这顺序仅仅是对于程序员来说是这样,实际执行并不一定。
  2. 如果2个操作重排序之后 执行的结果与happens-before规则执行的结果一样则允许重排序。

happens-before的8条规则能够保证存在happens-before规则的单一线程或者多条线程之中的2个操作是安全的。

  1. 程序顺序规则一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作。
  2. 监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁。
  3. volatile变量规则:对一个volatile域的写,happens-before于任意后续对这个volatile域的读。
  4. 传递性:如果A happens-before B,且B happens-before C,那么A happens-before C。
  5. start()规则:如果线程A执行操作ThreadB.start()(启动线程B),那么A线程的ThreadB.start()操作happens-before于线程B中的任意操作。
  6. join()规则:如果线程A执行操作ThreadB.join()并成功返回,那么线程B中的任意操作happens-before于线程A从ThreadB.join()操作成功返回
  7. 线程终结规则:线程中所有的操作都先行发生于线程的终止检测,我们可以通过Thread.join()方法结束、Thread.isAlive()的返回值手段检测到线程已经终止执行;
  8. 对象终结规则:一个对象的初始化完成先行发生于他的finalize()方法的开始;

参考资料

  1. 《Java并发编程的艺术》
  2. 【死磕Java并发】-----Java内存模型之happens-before

happens-before规则

原文:https://www.cnblogs.com/mibloom/p/9452548.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!