单例模式

来源:互联网 发布:私有云软件 编辑:程序博客网 时间:2024/06/05 03:07

1.线程不安全的懒汉模式

package SingletonPattern;/** * 懒汉模式,在需要的时候创建实例 * 加载类时比较快,但运行时获取对象的速度比较慢,线程不安全,只适用于单线程环境 */public class SingletonLazy {// 1.将构造方法私有化,不允许外部直接创建对象private SingletonLazy() {}// 2.创建类的唯一实例private static SingletonLazy instance = null;// 3.提供一个用于获取实例的方法public static SingletonLazy getInstance() {if (instance==null) {instance=new SingletonLazy();}return instance;}}


2.线程安全的懒汉模式

package SingletonPattern;/** * 懒汉模式,在需要的时候创建实例 * 加载类时比较快,但运行时获取对象的速度比较慢,线程安全,适用于多线程环境 */public class SingletonLazy {// 1.将构造方法私有化,不允许外部直接创建对象private SingletonLazy() {}// 2.创建类的唯一实例private static SingletonLazy instance = null;// 3.提供一个用于获取实例的方法public static synchronized SingletonLazy getInstance() {if (instance==null) {instance=new SingletonLazy();}return instance;}}


3.饿汉模式
package SingletonPattern;/** * 饿汉模式,加载类时创建实例,没有达到lazy loading的效果 * 加载类时比较慢,但运行时获取对象的速度比较快,线程安全 */public class SingletonHungry {// 1.将构造方法私有化,不允许外部直接创建对象private SingletonHungry() {}// 2.创建类的唯一实例private static SingletonHungry instance = new SingletonHungry();// 3.提供一个用于获取实例的方法public static SingletonHungry getInstance() {return instance;}}

4.静态内部类

package SingletonPattern;/** * 静态内部类 * 加载时不会创建实例,达到Lazy loading的效果 * 仅在调用getInstance()获取实例时,才创建实例 */public class SingletonInternal {// 1.将构造方法私有化,不允许外部直接创建对象private SingletonInternal() {}// 2.静态内部类,创建类的唯一实例private static class SingletonHolder {private final static SingletonInternal instance = new SingletonInternal();}// 3.提供一个用于获取实例的方法public static SingletonInternal getInstance() {return SingletonHolder.instance;}}

5.双重校验锁

package SingletonPattern;/** * 双重校验锁,在当前的内存模型中无效 */public class SingletonLock {      private SingletonLock(){}          private volatile static SingletonLock instance;    public static SingletonLock getInstance(){          if(instance==null){              synchronized(SingletonLock.class){                  if(instance==null){                  instance=new SingletonLock();                  }              }          }          return instance;      }  }


0 0
原创粉丝点击