happen-before 原则详解

1.happen-before 原则是什么?

happen-before 原则是作为java 内存模型(JMM)的一部分。它规定了若A操作happen-befroe B操作,那么A操作对与B操作来说是可见的。JVM在实现的时候就确保了是能够满足happen-before 原则的。

2.为什么会出现happen-before 原则?

  • java 存在线程工作内存及主内存(多核cpu及多级缓存导致),线程对变量的操作都是在工作内存中进行的,那么多线程的操作必然会导致共享数据的错乱
  • 操作系统会对指令进行重排序,在多线程环境下,重排序对会线程的执行结果及执行顺序造成严重的影响

通过对happen-before原则的定义,可以满足多线程环境下,程序能正常安装我们预想的路径进行执行,满足我们预想的结果。

3.JVM 依靠什么来实现happen-before 原则呢?

主要是依靠内存屏障。

3.happen-before 原则的具体内容

  • 程序次序规则

不能简单滴认为,写在前面的代码就先于后面的代码先执行,这个规则,一般需要与其他规则配合起来。

一般值指的是的真正指令执行顺序若A happen-before B

  • voliate 的写happen-before 读
  • 传递性原则
  • 线程start 原则

主线程start 子线程。则主线程的操作对于子线程是可见的

  • 线程join原则
  • 线程interupt原则
  • synchronized 原则

同一个锁的unlock操作happen-before此锁的lock操作

你可能感兴趣的:(java基础)