懒汉式单例设计模式存在的安全问题解决方式

package dengfeng.com.day23biji;

import javax.sound.midi.Track;

public class Demo1_Single {

    public static void main(String[] args) {
        //懒汉式单例设计模式存在的安全问题解决方式
        
        new Thread(new Runnable() {
            
            public void run() {
            
                    System.out.println(Thread.currentThread().getName()+"="+Single1.getSingle());
                }    
            }
        ,"one").start();
        
        new Thread(new Runnable() {
            
            public void run() {
                
                System.out.println(Thread.currentThread().getName()+"="+Single1.getSingle());
            }    
        }
        ,"two").start();
        
    }

}


class Single1 {                                            //懒汉式单例设计模式            
    static Object lock=new Object();
    private Single1(){            //将构造方法私有化
        
    }
    private static Single1 se=null;            //创建私有对象
    public static Single1 getSingle(){
        if(se==null){
            synchronized (lock) {                        //懒汉式单例存在的安全问题,得上锁
                if(se==null){    
                    try {
                        Thread.currentThread().sleep(1); 
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    se=new Single1();
                }            
            
        }
    }
        return se;
        
    }
}
原文地址:https://www.cnblogs.com/binghuaZhang/p/12567174.html