###单例模式 ####单例模式特色 保证一个类只有一个实例,而且提供一个访问该实例的全局访问点编程
windows中的任务管理器windows
操做系统的文件系统,一个操做系统只能有一个文件系统安全
servlet编程中,每一个servlet也是单例并发
SpringMVC中,控制对象也是单例操作系统
Spring中的bean线程
####单例模式分类 #####饿汉式 特色:减小系统开销code
public class SingletonDemo { //类初始化的时候当即加载(没有延时加载的优点),因为加载类的时候天热的线程安全 private static final SingletonDemo singleDemo = new SingletonDemo(); //私有化构造器 private SingletonDemo() { } //方法没有同步,调用效率高 public static SingletonDemo getInstance(){ return singleDemo; } }
#####懒汉式 ######懒汉式普通实现 特色:真正用的时候加载,资源的利用率高,可是每次调用的时候须要同步,并发下效率低对象
public class SingletonDemo1 { //调用的时候加载 private static SingletonDemo1 instance = null; //私有化构造器 private SingletonDemo1() { } //方法同步,调用效率低 public static synchronized SingletonDemo1 getInstance() { if (instance == null) { instance = new SingletonDemo1(); } return instance; } }
######饿汉式静态内部类实现 特色:内存
外部没有static属性不会饿汉式那样当即加载对象资源
真正调用getInstance()时,才会加载静态内部类.类加载时是线程安全的,static final保证内存中实例惟一
兼具并发高效和延时加载的优点
public class SingletonDemo2 { private static class singletonClass { private static final SingletonDemo2 instance = new SingletonDemo2(); } public static SingletonDemo2 getInstance() { return singletonClass.instance; } private SingletonDemo2() { } }