Java单例模式
来源:互联网 发布:知网查重入口 知乎 编辑:程序博客网 时间:2024/06/06 15:43
本文记录几种Java中的单例模式实现,侧重点为,常用、线程安全。这方面的文章很多,这里权当记录存档,方便查阅。
简单的线程安全实现
public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return instance; }}
静态成员变量赋值,它会在类首次加载时创建单例对象,jvm会保证对象只被创建一次。缺点就是:先创建后使用,饿汉式。
双检锁
public class Singleton { private static volatile Singleton instance = null; private Singleton() { } public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; }}
经典的双重校验单例模式。注意instance变量使用volatile声明。很多优秀开源库都使用这个模式,比如:Glide、EventBus等。如果你在使用Glide或对它感兴趣,请查看我的另一篇文章,深入理解Glide
静态内部类实现
public class Singleton { private Singleton() { } private static class SingletonHolder { private final static Singleton instance = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.instance; }}
和第一种类似,也是jvm控制加载保证只创建一个对象。不过它还是懒汉式的,推荐使用。
枚举单利
public enum Singleton{ INSTANCE; public void whateverMethod(){} }
《Effective Java》作者推荐使用的方法。枚举不仅能保证线程安全,还能防止反射调用私有构造器创建对象,提供自动序列表机制,防止反序列化创建新对象。
总结
以上几种实现方式均为线程安全的单利模式,看情况选择使用。感觉枚举实现方式有点黑科技。
推荐
- 正确使用 Volatile 变量
阅读全文
0 0
- java单例模式
- Java单例模式
- java单例模式
- java单例模式
- Java单例模式
- Java单例模式
- java单例模式
- Java单例模式
- java 单例模式
- java单例模式
- java单例模式
- java单例模式
- java 单例模式
- JAVA单例模式
- java单例模式 .
- Java 单例模式
- Java单例模式
- Java 单例模式
- servlet,jsp使用ajax进行数据交互
- Cookie/Session机制详解
- 收藏 备忘 读
- springmvc注解
- JSP基础(十五)——用JDBC处理MySQL大数据
- Java单例模式
- java基础之抽象类的意义(未修订)
- 微信抢票总结博客
- 坐标离散化
- 数据包的结构
- ReadMe
- 50. Pow(x, n)
- java并发包中的Lock
- va_list/va_start/va_arg/va_end深入分析