题解 | #创建单例对象#

创建单例对象

http://www.nowcoder.com/practice/9b316cd2d6264776918bc4bc31f37aec

线程安全,双重校验

public class Main {

    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1 == s2);
    }

}

class Singleton {

    private volatile static Singleton instance;

    private Singleton() {
    
    }
    
    public static Singleton getInstance(){
        if(instance == null){
            synchronized(Singleton.class){
                if(instance == null){
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
    
    

}

线程的不安全(懒汉式)

class Singleton {

 private static Singleton instance;

 private Singleton() {
    
 }
 
 public static Singleton getInstance(){
        if(instance == null){
           instance = new Singleton();
        }
        return instance;
    }
}

线程不安全(饿汉式)

class Singleton {

    private static Singleton instance = new Singleton();

    private Singleton() {
    
    }
    
    public static Singleton getInstance(){
        return instance;
    }
   
}

备注:饿汉式和 懒汉式也可以是线程安全的,比如加上synchronized

全部评论

相关推荐

12-01 14:24
吉首大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务