在Java中,如何正确地创建一个线程安全的单例模式(Singleton),并简要说明“Double-CheckedLocking”在JDK5之后为何能生效?_[MMKMMC]

可以使用“Double-CheckedLocking”结合`volatile`关键字实现线程安全的懒汉式单例,例如: ```java publicclassSingleton{ privatestaticvolatileSingletoninstance; privateSingleton(){} publicstaticSingletongetInstance(){ if(instance==null){ synchronized(Singleton.class){ if(instance==null){ instance=newSingleton(); } } } returninstance; } } ``` 在JDK5之后,`volatile`保证了`instance`的写操作对其他线程立即可见,并禁止指令重排序(防止`newSingleton()`中的分配内存、初始化、赋值三个步骤被重排),从而避免了早期JDK中因重排序导致的“半初始化对象”被其他线程读取的问题。在Java中,如何正确地创建一个线程安全的单例模式(Singleton),并简要说明“Double-CheckedLocking”在JDK5之后为何能生效?-java版搭子