m-yb

瞎扯设计模式1:单例模式 饿汉模式 懒汉模式 线程安全的单例 singleton 设计模式 java

【原创声明】此文为本人原创,欢迎转载,转载请注明出处,作者链接~

http://www.cnblogs.com/m-yb/p/8833085.html

 

单例很常用,面试也经常被问,如:不用自定义锁怎么实现线程安全的单例?

下面我将分别介绍饿汉、懒汉的单例(都是线程安全的):

饿汉单例:

package com.dayuanit.utils.hungry;

public class Singleton {
    private static final Singleton instance = new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return instance;
    }
}

懒汉单例:

package com.dayuanit.utils.lazy;

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

 

懒汉(静态内部类方式):

//静态内部类方式
public class Bird {

    private Bird(){

    }

    public static Bird getBird(){
        return BirdInstance.bird;
    }

    private static class BirdInstance{
        public static final Bird bird = new Bird();
    }
}

 

懒汉(枚举方式):

//枚举方式
public enum Person {

    instance;

    public static Person getPerson(){
        return instance;
    }

}

推荐枚举方式,静态内部类方式也可。

上述单例可以用如下方式检验是否为单例,true则为单例:

package com.dayuanit.utils.hungry;

public class Test {
    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getInstance();
        Singleton singleton2 = Singleton.getInstance();

        System.out.println(singleton1 == singleton2);

    }
}

完毕,各位看官觉得很赞的,留言评论,点赞~

本人才疏学浅,有疑问有误的地方,欢迎讨论~

  没有英汉互译结果
  请尝试网页搜索

posted on 2018-04-14 17:29  m-yb  阅读(371)  评论(0编辑  收藏  举报

导航