Happens-Before规则有哪些?

  1. 单线程原则
    在一个线程之内,后面的语句能够知道前面的代码做了什么。

  2. 锁操作(synchronized和Lock)
    一个线程加锁之后能够看到另一个线程解锁之前的所有操作

  3. volatile变量
    对一个变量的写操作先行发生于后面对这个变量的读操作

  4. 线程启动
    子线程启动,启动之前的操作的结果对子线程都是可见的

  5. 线程join
    主线程在等待某些线程的结果,所以join后面的语句能够看到join之前所有语句的运行结果

  6. 传递性
    如果操作A先行发生于操作B,而操作B先行发生于操作C,则操作A也是先行发生于操作C的

  7. 中断
    如果一个线程被其他线程中断,那么对这个线程interrupt()方法的调用会先行发生于被中断线程的代码检测到中断事件的发生

  8. 对象终结规则
    一个对象的初始化的最后一行指令先行发生于它的finalize()方法的第一行指令

  9. 工具类的Happens-Before原则
    有些工具类也是有Happens-Before原则的,比如CountDownLatch和CyclicBarrier等

发布了237 篇原创文章 · 获赞 245 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/104625582