单例在单线程中使用时,可以很好的发挥单例的特性
但是在多线程情况下 有一定概率发生创建多实例的情况
比如以下代码
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;
}