单例模式的各种写法

来源:互联网 发布:cms php 编辑:程序博客网 时间:2024/04/29 01:41

面试的时候被问道了,长时间不用就当记录下吧

懒汉模式

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

懒汉模式double-check

public class SingleDemo {    private static SingleDemo s = null;    private SingleDemo(){}    public static  SingleDemo getInstance(){        /*如果第一个线程获取到了单例的实例对象,         * 后面的线程再获取实例的时候不需要进入同步代码块中了*/        if(s == null){            //同步代码块用的锁是单例的字节码文件对象,且只能用这个锁            synchronized(SingleDemo.class){                if(s == null){                    s = new SingleDemo();                }            }        }        return s;    }}

饿汉模式

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

这种方式基于classloder机制避免了多线程的同步问题,饿汉模式因为在类的装载时候 就直接实例化了 所以有点不太友好啊

匿名类 饿汉模式

public class Singleton {    private static class SingletonHolder {    private static final Singleton INSTANCE = new Singleton();    }    private Singleton (){}    public static final Singleton getInstance() {    return SingletonHolder.INSTANCE;    }}

spring当中 TruePointcut 使用到了饿汉模式

0 0
原创粉丝点击