单例模式
2017-06-15 本文已影响40人
未见哥哥
类单例的实现方式
类对象不允许被多次创建,也就是在整个内存中只允许一个实例出现。
优雅的实现方式
代码如下,主要是以下的3个步骤即可,下面的注释写的很明白
public class ImageLoader {
private static ImageLoader mInstance;
private ImageLoader(){}
public static ImageLoader getInstance(int threadCount, Type type) {
//①初次调用时,mInstance为null,这时候可能多个进程并发进来。这里判空时的原因是减少每次对锁的判断
if (mInstance == null) {
//②加锁,保证只有一个线程能进来,这时候可能还有多个其他的线程等待着
synchronized (ImageLoader.class) {
//③第一个进来的mInstance为null,然后实例化对象。之后排队进来的判断mInstance不为null,那么就不会再重新初始化了
if (mInstance == null) {
mInstance = new ImageLoader(threadCount, type);
}
}
}
return mInstance;
}
}
- 注意一点:有些人会在getInstance方法中加上synchronize关键字,这种是比较粗暴的实现方式,并且在并发量很大的情况下,每次调用getInstance方法都要去判断一次锁,因此这样会减低效率。