标签:pack 在线 single 懒汉模式 加载类 构造器 单例类 sync 一个
单例模式就是在系统运行期间有且只有一个实例,且只能提供私有的构造器,保证不能随意创建该类的实例。
package cn.smbms.test; public class Singleton { //定义私有访问方法 private Singleton() {} //获取实例 private static Singleton singleton = new Singleton(); //提供一个供外界访问该class的方法 public static Singleton getInstance() { return singleton; } }
上述代码在类加载时就完成了初始化操作,故加载类较慢,但是获取对象的速度很快,也称饿汉模式,并且饿汉模式是在类初始化时就以及自行
实例化,因此不存在线程安全问题。
package cn.smbms.test; public class Singleton { //定义私有访问方法 private Singleton() {} //获取实例 private static Singleton singleton; //提供一个供外界访问该class的方法 public synchronized static Singleton getInstance() { if(singleton==null) { singleton= new Singleton(); } return singleton; } }
package cn.smbms.test; public class Singleton { //定义私有访问方法 private Singleton() {} //获取实例 private static Singleton singleton; public static class SingletionHelper{ private static Singleton INSTANCE=new Singleton(); } public static Singleton getInstance() { singleton= SingletionHelper.INSTANCE; return singleton; } public static Singleton test() { return singleton; } }
上述中,同样利用了classloder的机制来保证初始化instance只有一个线程,但是跟之前的方式略有不同。按照之前的方式只要singleton类被装载了
,那么singleton就会被实例化,并没有达到lazy loading的效果。而现在这种静态内部的方式时:singleton被装载了,却不一定被初始化原因在于没有主
动调用getInstance()方法。
标签:pack 在线 single 懒汉模式 加载类 构造器 单例类 sync 一个
原文地址:https://www.cnblogs.com/hfx123/p/9749894.html