
单例模式、指令重排序、锁、有序性
因为Synchronized块中的代码相当于是单线程执行的,而因为这个语义的存在,单线程执行的执行结果是保证不能被改变的,因此Synchronized代码块包裹的代码是有序的代码。这里的有序指的是宏观的有序。这段代码我们可以看到,即优化了性能,在多线程情况下,如果实例不为空了,则直接返回了。首先我们需要先好好理解一下加锁保证的有序性和volatile关键字防止指令重排序保证的有序性的区别。首先我们需要明确一点:那就是加锁是无法防止指令重排序的。这条语句时,这里是会发生一个指令重排序的问题的。









