欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java中的单例模式三种类型

程序员文章站 2022-03-10 10:45:43
饿汉式特点:1.类加载时就创建2.对象只创建一次3.天生线程安全创建过程1.对象作为属性,且私有静态final修饰2.构造方法私有化3.提供获取对象的方法/** * 单例模式 * 饿汉式 * @author lzp * @Date 2020年7月30日 */public class SingleTon { private static final SingleTon singleTon = new SingleTon(); private Single...

饿汉式

特点:

  • 1.类加载时就创建
  • 2.对象只创建一次
  • 3.天生线程安全

创建过程

  • 1.对象作为属性,且私有静态final修饰
  • 2.构造方法私有化
  • 3.提供获取对象的方法
/**
 * 单例模式
 * 饿汉式
 * @author lzp
 * @Date 2020年7月30日
 */
public class SingleTon {
	//设置私有静态final,外部无法访问,且且类加载时就创建,并只创建一次
    private static final SingleTon singleTon = new SingleTon();

    private SingleTon() {
    }

    public static SingleTon getInstance() {
        return singleTon;
    }
}

懒汉式

特点:

  • 1.类在需要时才创建
  • 2.对象只创建一次
  • 3.线程不安全,可以使用同步方法保证线程安全

创建过程

  • 1.对象作为属性,且私有静态修饰
  • 2.构造方法私有化
  • 3.提供获取对象的方法
  • 4.可以使用同步代码块或者同步方法来保障线程安全
/**
 * 单例模式
 * 懒汉式
 * @author lzp
 * @Date 2020年7月30日
 */
public class SingleTon2 {
    private static SingleTon2 singleTon = null;

    private SingleTon2() {
    }

    // 同步方法
    //	public static synchronized SingleTon2 getInstance() {
    //		if(singleTon == null) {
    //			singleTon = new SingleTon2();
    //		}
    //		return singleTon;
    //	}

    //同步代码块 代码量较多时更优化
    public static SingleTon2 getInstance() {
        if (singleTon == null) {
            synchronized (SingleTon.class) {
                if (singleTon == null) {
                    singleTon = new SingleTon2();
                }
            }
            singleTon = new SingleTon2();
        }
        return singleTon;
    }
}

静态内部类方式

特点:

  • 1.线程安全
  • 2.用时才创建
  • 结合了饿汉和懒汉的优点

创建过程:

  • 1.私有化构造方法
  • 2.创建内部类,设置静态对象
  • 3.创建获取对象的方法
/**
 * 单例模式 
 * 静态内部类式
 * @author lzp
 * @Date 2020年7月30日
 */
public class SingleTon3 {
	//私有化构造方法
    private SingleTon3() {
    }

    //获取对象
    public static SingleTon3 getInstance() {
        return Holder.singleTon3;
    }

    //内部类
    private static class Holder{
        //对象只会创建一次
        static SingleTon3 singleTon3 = new SingleTon3();
    }


}

本文地址:https://blog.csdn.net/qq_42365534/article/details/107695804