单例在多线程下如何继续保持单例?

来源:互联网 发布:网络监控路由器 编辑:程序博客网 时间:2024/05/17 01:35

单例在单线程中使用时,可以很好的发挥单例的特性


但是在多线程情况下 有一定概率发生创建多实例的情况  

比如以下代码

public static ImageLoader getInstance() {if (instance == null) {<span style="white-space:pre"></span>instance = new ImageLoader();}return instance;}


比如三个线程几乎同时去创建这个单例的实例   很有可能会都创建一个实例 因为if的条件不成立

这种情况需要进行加锁

public static ImageLoader getInstance() {if (instance == null) {synchronized (ImageLoader.class) {instance = new ImageLoader();}}return instance;}


但是这种情况下会发现还是会创建多实例  最终改版

public static ImageLoader getInstance() {if (instance == null) {synchronized (ImageLoader.class) {if (instance == null) {instance = new ImageLoader();}}}return instance;}


0 0
原创粉丝点击