首页 > 代码库 > 单例模式
单例模式
最简单的实现
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; } }
存在问题:通过增加synchronized关键字。但是同步会降低性能
解决方案:
1。如果getInstance()的性能对应用程序不是很关键,就什么都别做。
如果你的应用程序可以接受getInstance()造成的额外负担,就忘了这件事吧。同步如果你的应用程序可以接受getInstance()地方法既简单又有效。但是你必须知道,同步一个方法 可能造成程序执行效率下降100倍,因此,如果将如果你的应用程序可以接受getInstance()的程序使用在频繁的地方,你可能得重新考虑了。
2.使用"急切"创建实例,而不用延迟实例化的做法
如果应用程序总是创建并使用单例,或者在创建和运行时方面的负担不太繁重,你可能想要急切创建此单件。
public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { } public static synchronized Singleton getInstance() { return instance; } }
3.用"双重检查加锁",在getInstance()中减少同步
利用双重加锁(double-checked locking),首先检查是否实例已经创建了,如果尚未创建,"才"进行同步。这样一来,只有第一次会同步,这正是我们想要的。
public class Singleton { private static volatile Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null) { synchronized(Singleton.class) { instance = new Singleton(); } } return instance; } }
单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。