夜话JAVA设计模式之单例模式(单件模式Singleton)

单例模式也叫单件模式,就是确保一个类只有一个实例,并提供一个全局访问点。

       设计成单例即把某个类设计成我们自己管理的单独实例,避免实例对象的重复创建,我们只有通过单例类的全局访问点获取实例。

下面来看金典的几种单例模式java代码实现:

 1、饿汉模式

/**
 * 饿汉模式(创建和运行负担小,占用内存小时使用)
 * @author monkjavaer
 * @date 2018/08/27 21:44
 */
public class Singleton1 {

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

}

  

2、懒汉模式

/**
 * 懒汉模式
 * (懒汉模式并没有考虑线程安全问题,
 * 在多个线程可能会并发调用它的getInstance()方法,
 * 导致创建多个实例.)
 * @author monkjavaer
 * @date 2018/08/27 22:14
 */
public class Singleton2 {
    private static  Singleton2 instance ;
    private Singleton2(){}
    public static Singleton2 getInstance(){
        if (instance ==null) {
            instance = new Singleton2();
        }
        return instance;
    }
}

  

3、懒汉模式处理多线程

/**
 *
 * 懒汉模式(处理多线程)synchronized同步会降低性能。
 * @author monkjavaer
 * @date 2018/08/27 22:21
 */
public class Singleton3 {
    private  static  Singleton3 instance ;
    private Singleton3(){}
    public static synchronized Singleton3 getInstance(){
        if (instance == null){
            instance = new Singleton3();
        }
        return instance;
    }
}

  

4、用“双重检查加锁”,在getIntance()中减少使用同步

/**
 * 用“双重检查加锁”,在getIntance()中减少使用同步
 * 利用双重检查加锁,首先检查是否实例已经创建,如果没有才同步。
 * 这样只有第一次才会同步。
 * @author monkjavaer
 * @date 2018/08/27 22:28
 */
public class Singleton4 {
    private volatile static  Singleton4 instance;

    private Singleton4(){}

    public static Singleton4 getInstance(){
        //如果实例不存在,进入同步区
        if (instance == null){
            //只有第一次才执行
            synchronized (Singleton4.class){
                //进入区块再检查一次
                if (instance == null){
                    instance = new Singleton4();
                }
            }
        }
        return instance;
    }

}
原文地址:https://www.cnblogs.com/monkjavaer/p/9569260.html