单例模式--饿汉懒汉多线程以及多线程下改进

Posted hyczzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式--饿汉懒汉多线程以及多线程下改进相关的知识,希望对你有一定的参考价值。

代码注释有介绍

package singleton;

/**
 * @author: ycz
 * @date: 2018/12/24 0024 22:15
 * @description: 懒汉模式
 */
public class SingleTon1 {
    public SingleTon1(){}
    private static SingleTon1 instance1 = null;

    public static SingleTon1 getInstance1(){
        if (instance1==null){
            instance1 = new SingleTon1();
        }
        return instance1;
    }
}
package singleton;

/**
 * @author: ycz
 * @date: 2018/12/24 0024 22:21
 * @description: 饿汉模式
 */
public class SingleTon2
{
    private SingleTon2(){}
    private static final SingleTon2 instance2 = new SingleTon2();

    public static SingleTon2 getInstance2(){
        return instance2;
    }
}
package singleton;

/**
 * @author: ycz
 * @date: 2018/12/24 0024 22:32
 * @description: 解决多线程问题(在创建单例时加锁)
 */
public class SingleTon3 {
    private SingleTon3(){}
    private static SingleTon3 instance3 = null;
    public static synchronized SingleTon3 getInstance3(){
        if (instance3 == null){
            instance3 = new SingleTon3();
        }
        return instance3;
    }
}
package singleton;

/**
 * @author: ycz
 * @date: 2018/12/24 0024 22:36
 * @description: 在方法上加锁效率低下;可以先判断是否有创建过单例,如果没有在加锁创建
 */
public class SingleTon4 {

    private SingleTon4(){}

    private static final Object myLocker = new Object();

    private static SingleTon4 instance4 = null;

    public static SingleTon4 getInstance4(){
        if (instance4 == null){
            synchronized (myLocker){
                instance4 = new SingleTon4();
            }
        }
        return instance4;
    }
}

这是SingleTon1(饿汉式)时会出现的问题。

技术分享图片

 

以上是关于单例模式--饿汉懒汉多线程以及多线程下改进的主要内容,如果未能解决你的问题,请参考以下文章

Java面试题之在多线程情况下,单例模式中懒汉和饿汉会有什么问题呢?

多线程单例 可以概括为两中模式(饿汉模式和懒汉模式)

多线程 实现单例模式 ( 饿汉懒汉 ) 实现线程安全的单例模式 (双重效验锁)

4创建型模式之单例模式__多线程下的懒汉式单例和饿汉式单例

多线程案例 --- 单例模式(饿汉懒汉)阻塞式队列

C++ 单例模式(懒汉饿汉模式)