JAVA多线程的初级认识3-happens-before原则

针对java的happens-before有很多原则,个人总结起来如下,做个笔记别忘记:

  • 程序有序原则

如何理解呢?个人理解就是无论程序如何优化,包括指令集重排序,hotspot的c1,c2运行时候优化等,都不会更改结果。即无论如何优化,结果不会变。

  • volatile原则

对volatile修饰的变量写的操作一定发生在读的操作之前。即我们读取出来的volatile变量一定是最新的。个人感觉类似于放弃了缓存的功能~通过指令store load来进行内存屏障,具体细节还需深入了解

  • 传递性原则

即A happens before B, B happens before C,那么A一定happens before C.

  • Start原则

在Thread A里面启动Thread B(Thread B.start()),那么Thread A在start语句之前对于共享变量的修改happens before ThreadB.Start

  • Join原则

Thread.join应该都晓得,具体功能就是等待子线程完成后再继续执行当前线程。Thread A调用ThreadB.join,那么ThreadB对于共享变量的修改happens before ThreadB.join之后的代码~

  • 监视器锁原则

对一个锁的解锁,happens-before 于 随后对这个锁的加锁

你可能感兴趣的:(java,Thread)