java单例的几种实现方式
来源:互联网 发布:java开源考试系统 编辑:程序博客网 时间:2024/06/05 07:37
1.懒汉式
线程不安全,如果两个线程同时执行到了
if (instance == null) {//这一句判断都为真,紧接着就会创建两个实例
public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { //对方法枷锁性能不高 if (instance == null) { instance = new Singleton(); } return instance; } }
线程安全的,double-check
public class Singleton { private volatile static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance; } }
3.静态内部类,jvm在调用getInstance()时才会进行类的初始化
public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){} public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } }
4.通过枚举实现,枚举实例的创建时线程安全的,并且对序列化有保证
public enum Singleton { INSTANCE; public void whateverMethod() { } }
1.懒汉式
线程不安全,如果两个线程同时执行到了
if (instance == null) {//这一句判断都为真,紧接着就会创建两个实例
public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { //对方法枷锁性能不高 if (instance == null) { instance = new Singleton(); } return instance; } }
线程安全的,double-check
public class Singleton { private volatile static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance; } }
3.静态内部类,jvm在调用getInstance()时才会进行类的初始化
public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){} public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } }
4.通过枚举实现,枚举实例的创建时线程安全的,并且对序列化有保证
public enum Singleton { INSTANCE; public void whateverMethod() { } }
0 0
- java单例的几种实现方式
- Java单例模式的几种实现方式
- java实现单例模式的几种方式
- 单例实现的几种方式
- 单例的几种实现方式
- 实现单例的几种方式
- 单例的几种实现方式
- Java单例模式几种实现方式
- 单例模式的几种实现方式的对比
- java中实现单例模式的几种方式,简单易懂
- 单例模式singleton的几种实现方式
- 单例模式的几种实现方式
- 单例模式的几种实现方式
- ios学习--单例实现的几种方式
- 单例模式的几种实现方式比较
- C#单例模式的几种实现方式
- 单例模式的几种实现方式总结
- 常用设计模式-单例的几种实现方式
- 设计模式--外观模式(Factory)
- Swift学习 数字
- Guava学习——集合类BiMap
- 设计模式-抽象工厂
- hdu 1255 覆盖的面积(线段树离散化)
- java单例的几种实现方式
- iOS 应用发布流程
- ButterKnife注解框架使用
- 《Erlang 程序设计》练习答案 -- 第六章 顺序程序的错误处理
- chat function based on pthread and ipc
- 设计模式-生成器模式(Builder)
- Django中块标签for endfor的使用
- Android 通过开源框架实现加载网络图片并下载到SD卡通知系统相册显示,(并实现分享图片功能)
- SQL Server 大文件异地备份