1.饿汉式
优点:线程安全
缺点:立即加载
2.懒汉式
优点:懒加载
缺点:线程不安全(可以用双重锁机制来保证线程安全,但是调用效率低)
3.内部类型单例模式,前两种基本不用,因为这种包含前两种的优点
优点:1、线程安全,2、懒加载
代码如下:
package sington; public class InnerSing { private InnerSing(){ } public static InnerSing getIntance(){ return InnerClass.instance; } private static class InnerClass { private static InnerSing instance = new InnerSing(); } }
4、枚举类
优点:前三种都没法避免使用反射/序列化(即写入硬盘再读取硬盘创建对象)来创建对象,
而枚举类可以;(其实可以通过构造器代码写:对象非空判断+抛错可以防止反射创建,而重写readResolve()方法可以防止反系列化构造多一个对象)
缺点:不是懒加载
代码如下:
package sington; public enum EnumSing { INTANCE; public void function(){ System.out.println("具体执行方法"); } public static EnumSing getIntance(){ return INTANCE; } }
原文:https://www.cnblogs.com/yeyongjian/p/8904929.html