码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2018-04-27 02:33:03      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:get   定义   处理   初始   ret   col   问题   code   饿汉   

模式定义

确保一个类只有一个示例,并提供一个全局的访问点。

示例

经典模式:多线程问题,多个线程处理时会可能有多个实例,懒汉式

/**
 * 单例模式
 *
 * @author Colin
 * @create 2018-04-25
 **/
public class Singleton {

    private static Singleton singleton;

    private Singleton(){

    }

    public static Singleton getInstance(){
        //线程1 
        if (singleton == null){
        //线程2 多线程问题
            singleton= new Singleton();
        }
        return singleton;
    }
}

同步锁:每次获取示例时都要加锁,性能上会有影响。只要在第一次创建实例的时候加锁处理即可。懒汉式线程安全

/**
 * 加锁的单例模式
 *
 * @author Colin
 * @create 2018-04-25
 **/
public class Singleton2 {

    private static Singleton2 singleton;

    private Singleton2(){

    }

    public static synchronized Singleton2 getInstance(){
        if (singleton == null){
            singleton= new Singleton2();
        }
        return singleton;
    }
}

静态加载:如果对象比较大在类加载时就进行初始化,可能影响类的初始化速度。饿汉式

/**
 * 单例模式
 *
 * @author Colin
 * @create 2018-04-25
 **/
public class Singleton1 {
    private static Singleton1 singleton=new Singleton1();

    private Singleton1(){}

    public static Singleton1 getInstance(){
        return singleton;
    }
}

双重锁定:只在第一次初始化时加锁


/**
 * 双重检查锁
 *
 * @author Colin
 * @create 2018-04-25
 **/
public class Singleton3 {

    private static Singleton3 singleton3;

    private Singleton3(){}

    public static Singleton3 getInstance(){
        if (singleton3 == null){
            synchronized (Singleton3.class){
                if (singleton3 == null){
                    singleton3=new Singleton3();
                }
            }
        }
        return singleton3;
    }

}

单例模式

标签:get   定义   处理   初始   ret   col   问题   code   饿汉   

原文地址:https://www.cnblogs.com/coliz/p/8955587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!