> 文档中心 > 单例模式的实现方式(懒汉模式、俄汉模式,java语言)

单例模式的实现方式(懒汉模式、俄汉模式,java语言)


饿汉模式

优点:线程安全,调用效率较高
缺点:不能懒加载

实现方式

/** * 优点:线程安全,调用效率较高 * 缺点:不能懒加载 */public class Sinleton {    //1.私有化构造器    private Sinleton() {    }    //2.立即加载对象    private static Sinleton instance = new Sinleton();    //3.提供访问接口    public static Sinleton getInstance(){ return instance;    }}

测试

/** * className:Test * * @author:zjl * @version:0.1 * @date:2020/8/1920:08 * @since:jdk1.8 */public class Test {    public static void main(String[] args) { Sinleton instance0 = Sinleton.getInstance(); Sinleton instance1 = Sinleton.getInstance(); Sinleton instance2 = Sinleton.getInstance(); System.out.println("instance0和instance1是否为同一对象:"+instance0.equals(instance1)); System.out.println("instance0和instance2是否为同一对象:"+instance0.equals(instance2));    }}

测试结果
在这里插入图片描述

懒汉模式

优点:懒加载,避免了资源浪费
缺点:通过synchronized实现同步,并发效率低

实现方式

/** * 优点:懒加载,避免了资源浪费 * 缺点:通过synchronized实现同步,并发效率低 */public class Sinleton {    //1.私有化构造器    private Sinleton() {    }    private static Sinleton instance = null;    //2.提供访问接口    public synchronized static Sinleton getInstance(){   //synchronized同步 if(instance==null)//3.第一次调用时候加载实例对象     instance = new Sinleton(); return instance;    }}

测试

/** * className:Test * * @author:zjl * @version:0.1 * @date:2020/8/1920:08 * @since:jdk1.8 */public class Test {    public static void main(String[] args) { Sinleton instance0 = Sinleton.getInstance(); Sinleton instance1 = Sinleton.getInstance(); Sinleton instance2 = Sinleton.getInstance(); System.out.println("instance0和instance1是否为同一对象:"+instance0.equals(instance1)); System.out.println("instance0和instance2是否为同一对象:"+instance0.equals(instance2));    }}

测试结果
在这里插入图片描述

KTV音响网