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

指令重排

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

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()方法

相关文章

网络知识汇总

网络知识汇总

传输层概述 作用:传输层为它上面的应用层提供通信服务。 在OSI七层参考模型中,传输层是面向通信的最高层,也是用户功能的最底层。 传输层两大重要的功能:复用 和 分用。 复用:在发送端,多个应用进程公...

触发JVM进行Full GC的情况及应对策略(转)

触发JVM进行Full GC的情况及应对策略(转)

堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,如下图所示: 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称...

集合各实现类的底层实现原理(转)

集合各实现类的底层实现原理(转)

ArrayList实现原理要点概括 ArrayList是List接口的可变数组非同步实现,并允许包括null在内的所有元素。 底层使用数组实现 该集合是可变长度数组,数组扩容时,会将老数组中的元素重...

发表评论

访客

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