java 单例模式的优化
来源:互联网 发布:湘南学院网络教学平台 编辑:程序博客网 时间:2024/06/01 20:02
1、
public class Singleton {private Singleton(){System.out.println("创建单例");}private static Singleton instance = new Singleton();public static Singleton getInstance(){return instance;}public static void otherStaticFunc(){System.out.println("其他方法");}public static void main(String[] args) {Singleton.otherStaticFunc();}}输出:创建单例其他方法不足分析:由于成员变量instance是static的,因此在JVM加载单例类时,就会被创建。此时就算调用该类中的其他方法,也会初始化instance,但是我们并没有使用它。假如它的初始化要做的工作比较多,就会影响调用其他函数的速度。
因此引入延迟加载机制。
2、
public class LazySingleton {public LazySingleton() {System.out.println("延迟加载单例");}private static LazySingleton instance = null;public static synchronized LazySingleton getInstance(){if(instance == null)instance = new LazySingleton();return instance;}public static void otherStaticFunc(){System.out.println("其他方法");}public static void main(String[] args) {LazySingleton.otherStaticFunc();}}输出:其他方法将instance初始化为空,确保类加载时无额外负担,getInstance()必须用同步关键字synchronized修饰,否者在多线程环境下会出问题。第二种方法较第一种方法相比,虽然实现了延迟加载的功能,但引入了同步,它的耗时远远大于第一种单例模式。
因此还要继续改进。
3、
public class StaticSingleton {private StaticSingleton(){System.out.println("内部内维护单例");}private static class SingletonHolder{private static StaticSingleton instance = new StaticSingleton();}public static StaticSingleton getInstance(){return SingletonHolder.instance;}public static void otherStaticFunc(){System.out.println("其他方法");}public static void main(String[] args) {StaticSingleton.otherStaticFunc();}}输出:其他方法用内部类的方式来维护单例,因为在类加载时,其内部类不会被初始化,genInstance()被调用时才会加载SingletonHolder。由于实例的建立是在类加载时完成,故对多线程是友好 的,不需要使用同步关键字。
0 0
- java 单例模式的优化
- java 单例模式的优化与扩展
- Java单例模式优化写法
- 优化单例模式
- 单例模式优化
- 单例模式优化
- 单例模式优化
- 对单例模式的优化
- 单例模式的优化-双重锁定
- 优化后的单例模式
- Java性能优化之设计模式-单例模式
- Java的单例模式
- Java的单例模式
- java的单例模式
- java的单例模式
- Java的单例模式
- Java的单例模式
- java的单例模式
- java.net.SocketException四大异常解决方案
- R语言中数据的输入与输出之READ函数
- SVN与TortoiseSVN修改日志和强制写日志实现详解
- 数据分析、数据挖掘、数据统计、OLAP 之间的差异是什么?-- 孙文亮
- jscriptbug
- java 单例模式的优化
- 产品入门
- xml.etree.ElementTree — The ElementTree XML API 中文翻译
- virtualization - memory and device I/O virtualization
- R语言中的数据列表
- MFC复习和学习 第八章 MFC映射 MFC文件 MFC文件查找 序列化
- 数据挖掘-公司别名聚合(四)
- 合成的默认构造函数
- javaweb 项目开发顺序