java中singleton的几种实现方式
来源:互联网 发布:佳能mp258清零软件 编辑:程序博客网 时间:2024/05/22 04:50
传统的最简单的方式
这种模式有一个缺点就是不能实现延迟加载,也就是当Singleton类被初始化时,INSTANCE立刻就被创建。比如这个类包含其它static方法,而你正好又调用了static方法,那么
INSTANCE就被创建,尽管你这个时候并不想使用INSTANCE。当你不需要延迟加载或者该类里没有其它static方法的时候,可以使用这种方式来简单的实现单例模式。
public class Singleton { private static final Singleton INSTANCE = new Singleton(); // 私有构造器,保证了只能在本类内部进行实例化 private Singleton() {} public static Singleton getInstance() { return INSTANCE; }}
对传统方式的改进
这种模式很好的实现了延迟加载,而且适用于任何java版本和java虚拟机,可以认为是java语言里单例模式的标准实现。
public class Singleton { // 私有构造器,保证了只能在本类内部进行实例化 private Singleton() {} /** * 当第一次执行Singleton.getInstance() 或者第一次访问SingletonHolder.INSTANCE时,SingletonHolder * 被加载 , 在此之前,INSTANCE不会被初始化。 */ private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; }}
使用同步关键字的传统方式(适用于java5.0以上)
public class Singleton { private volatile static Singleton singleton;//volatile关键字是必须的,用以确保多线程共享实例 private Singleton(){} public static Singleton getSingleton(){ if(singleton==null) { synchronized(Singleton.class){ if(singleton==null) singleton= new Singleton(); } } return singleton; }}
使用同步关键字的双重加锁方式(java1.4及以下版本的实现)
public class Singleton { private static Singleton singleton; private Singleton(){} public static synchronized Singleton getSingleton(){ if(singleton==null) { synchronized(Singleton.class){ if(singleton==null) singleton= new Singleton(); } } return singleton; }}
个人推荐使用第二种方式。
- java中singleton的几种实现方式
- java中Singleton的几种实现方式
- Singleton模式的几种实现方式
- singleton模式的几种实现方式
- 几种Singleton模式的java实现
- 单例模式singleton的几种实现方式
- java Singleton 几种方式解析
- java Singleton 几种方式解析
- java Singleton 几种方式解析
- Singleton的几种实现
- Singleton Pattern 的几种方式
- Singleton Pattern 的几种方式
- java实现单例singleton的几种模式
- java中弹出式对话框的几种实现方式
- java中线程池的几种实现方式
- java中线程池的几种实现方式
- Java中阻塞队列的几种实现方式
- java中实现swap函数的几种方式
- 显示器终于修好了
- ubuntu10.04中安装使用IE6
- oracle分页查询数据重复问题的解决
- MFC 控件随窗口同步变大的实现
- 有没有这样一种东东
- java中singleton的几种实现方式
- 推荐一个修改文件编码的eclipse插件
- 这种需求,大家看看有没有比较好的解决方案
- Are you happy?
- 工欲善其事,必先利其器-----近期工作汇总备忘
- 规范化管理的困惑、探索以及项目辅助管理工具的推荐
- 苹果iPad air技巧教程:50个实用小技巧
- Java 路径 System.getProperty("key")的参数key
- 推荐一些web前端开发比较有用的框架和组件