关于线程安全单例模式的探究,大家伙回分析下哇

关于线程安全单例模式的探究,大家伙来分析下哇
所谓的线程安全的单例模式,是指在创建这个对象时的线程安全,并不是使用时的安全,那么这种情况呢,

当第一次加载单例模式后,该单例对象就已经存在,接下来就来了两个线程,A和B,在A获得单例后,对该单例进行了一些修改准备做某事,

但是A还没开始做事的时候,CPU把运行片段分配给了B,此时B也获得该单例,因为单例模式是static,所以B获得的是A修改后的单例对象,

然而,B也需要对该单例对象进行一些修改,在B修改完后CPU又把运行片段给了A,此时A手上的单例对象已不是他修改的单例对象而是B修改后的单例对象,

那么,这个就应该不叫线程安全吧?

我理解的对么?我把静态内部类单例模式的代码贴出来,据说他就是线程安全的懒汉式单例模式

public class Singleton {  
private Singleton(){ }  
    
    public static Singleton getInstance()  
    {  
        return Nested.instance;       
    }  
      
    //在第一次被引用时被加载  
    static class Nested  
    {  
        private static Singleton instance = new Singleton();  
    }


------解决思路----------------------
线程安全只是针对变量来说的,如果线程在调用方法的时候用到的变量都是局部变量, 那就是线程安全的.
你怕初始化的时候有可能出现多个实例的情况
可以这样写

public class Singleton {  
    private Singleton(){ }  
    private static final Integer Lock = new Integer(1);
    private static Singleton instance = null;
    public static Singleton getInstance()  {  
           if(instance == null){
               synchronized (Lock) {
                    if(instance == null){
                          instance = new  Singleton();
                    }
               }
           }
          return instance;
    }