单例模式的实现方式(懒汉模式、俄汉模式,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)); }}
测试结果