双重校验锁实现的单例,已经使用了synchronized,为什么还需要volatile?
最新推荐文章于 2023-07-06 19:41:02 发布
双重校验锁(DCL)实现的单例模式中,即使使用了`synchronized`,仍需要`volatile`修饰单例对象。原因是`synchronized`虽然保证原子性和有序性,但无法阻止指令重排。`volatile`则确保了单例对象在多线程环境中的可见性,避免了因重排序导致的线程安全问题。这样结合使用,能有效防止多个线程创建多个实例。
摘要由CSDN通过智能技术生成