当前位置:首页 > java基础 > 正文内容

指令重排

淙嶙8年前 (2018-07-31)java基础1067

Happen-Before先行发生规则

如果光靠sychronized和volatile来保证程序执行过程中的原子性, 有序性, 可见性, 那么代码将会变得异常繁琐.

JMM提供了Happen-Before规则来约束数据之间是否存在竞争, 线程环境是否安全, 具体如下:

顺序原则

一个线程内保证语义的串行性; a = 1; b = a + 1;

volatile规则

volatile变量的写,先发生于读,这保证了volatile变量的可见性,

锁规则

解锁(unlock)必然发生在随后的加锁(lock)前.

传递性

A先于B,B先于C,那么A必然先于C.

线程启动, 中断, 终止

线程的start()方法先于它的每一个动作.

线程的中断(interrupt())先于被中断线程的代码.

线程的所有操作先于线程的终结(Thread.join()).

对象终结

对象的构造函数执行结束先于finalize()方法

相关文章

理解TheadLocal源码

理解TheadLocal源码

记忆会被改变,以前看过的代码,现在发现和记忆中的不一样,大脑会修改记忆的确是真的. 那就重复的看下,记录下吧. 作用: 为每个使用该变量的线程创建一个独立的变量副本.在多线程环境,就能避免变...

JAVA中SPI机制

JAVA中SPI机制

SPI是什么SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架和替换组件。 整体机制图如下: 调用方->标准...

JVM总结

JVM总结

花费了一周时间对深入理解Java虚拟机做了个回顾,对原来的知识做了个补充,直到慢慢的阅读中,才发现有好多东西已经忘了。把所阅读的通过一个思维导图做个了简单的总结,时间仓促,还有不全。待十一节后继续补充...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。