单例

来源:互联网 发布:马来西亚 穆斯林 知乎 编辑:程序博客网 时间:2024/04/29 16:31
/**  * 懒汉模式,饱汉式* @author 冒云龙 * @date 2017年4月17日 下午8:28:34 * @describe *///多线程会出现问题,可以在方法上加synchronized,但会大大影响性能public class Singleton {private static Singleton uniqueSingleton;//利用一个静态变量来记录Singleton的唯一实例private Singleton(){//把构造器声明为私有的,只有Singleton类内才能调用构造器}public static Singleton getInstance(){//可以通过类名调用if(uniqueSingleton==null){//用getInstance()去实例化对象,并返回这个实例uniqueSingleton= new Singleton();}//如果实例不存在就会创建,不需要这个实例就永远不会创建(延迟实例化)return uniqueSingleton;}//这里是其他方法}
/**  * 饿汉模式,静态初始化时就创建了,保证了线程安全* @author 冒云龙 * @date 2017年4月17日 下午8:28:34 * @describe */public class Singleton {private Singleton(){}private static Singleton uniqueSingleton = new Singleton();public static Singleton getInstance(){return uniqueSingleton;}}
/**  * 懒汉模式,双重检查枷锁* @author 冒云龙 * @date 2017年4月17日 下午8:28:34 * @describe */public class Singleton {private volatile static Singleton unqiueInstance;//voiatile关键字确保,当uniqueInstance被初始化成Singleton实例时,多个线程正确的处理unqiueInstanceprivate Singleton(){}public static Singleton getInstance(){if(unqiueInstance==null){//检查实例,如果不存在就进入同步区synchronized (Singleton.class) {//只有第一次才彻底执行这一块的代码if(unqiueInstance==null){//再检查一次,如果仍是null,才创建unqiueInstance = new Singleton();}}}return unqiueInstance;}}


原创粉丝点击