• 了解happen-before规则的内存语义和读写语义
    1. volatile有什么特性?
      1. 有序性 — 禁止指令重排序
      2. 可见性
    2. volatile的特性如果什么方式实现?
      1. 有序性 — 通过内存屏障实现。
      2. 可见性 — 硬件嗅探。在多处理器下,为了保证缓存一致性,每个处理器通过嗅探总线上传播的数据来检测自己缓存的数据是否过期。
    3. 插入:原子操作如何实现?即处理器如何实现原子操作?
      1. 第一种机制是总线锁实现原子性
      2. 第二种机制是缓存锁实现原子性。总线锁开销比较大,使用缓存锁可以优化。
      3. 但是,在以下情况下不会使用缓存锁代替总线锁:
        1. 操作的数据不能缓存在处理器内;或者跨多个缓存行,可以使用总线锁处理;
        2. 处理器不支持缓存锁;
    4. volatile的happen-before规则知道吗?说一说
      1. 一句话:因果有序。保持在多线程环境中,上一个操作的结果对下一个操作的有序性和操作结果的可见性。
    5. happen-before有哪些规则?
      1. 作用:该规则定义了java多线程操作的有序性和可见性,防止编译器重排序对程序结果的影响。
      2. 有哪些规则?
        1. 程序次序有序:一个线程中的每一个操作,hb与该线程的任意后续操作。
        2. 监视器锁规则:对一个锁的unlock,hb与这个锁的lock.
        3. volatile变量规则: 对一个volatile域的写,bh与任意后续对这个volatile域的读。
          1. 面试必备:volatile与happen-before规则 - 图1
        4. 传递规则:如果A hb B,且B hb C,那么A hb C
        5. 线程start规则:
        6. 线程join规则:
        7. 线程终结规则:
        8. 对象终结规则:

    https://www.toutiao.com/i6742256533628781067/
    http://ifeve.com/java-%E4%BD%BF%E7%94%A8-happen-before-%E8%A7%84%E5%88%99%E5%AE%9E%E7%8E%B0%E5%85%B1%E4%BA%AB%E5%8F%98%E9%87%8F%E7%9A%84%E5%90%8C%E6%AD%A5%E6%93%8D%E4%BD%9C/