一、指令重排
指令重排是指在程序执行过程中, 为了性能考虑, 编译器和CPU可能会对指令重新排序.
1.编译器重排
int a = 1;
int b = 2;
在这种没有依赖顺序的语句是有可能会变成先给b赋值再给a赋值
2.cpu重排
汇编的一条指令实际上是会分解成多步并交由不同的硬件来进行操作
然后各个硬件相当于流水线的工人,可能这个硬件效率高,执行了4条指令,而另外一个执行了3条,就会导致原本看起来是一个汇编指令的指令有了不同的先后顺序。
那么结合单例模式的创建,举个doublecheck的例子
package singleton.lazy;
public class DoubleCheckLockingSingleton {
private static DoubleCheckLockingSingleton uniqueInstance;
private DoubleCheckLockingSingleton() {
}
public static DoubleCheckLockingSingleton getInstance() {
if (uniqueInstance == null) {
synchronized (DoubleCheckLockingSingleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new DoubleCheckLockingSingleton();
}
}
}