最近复习准备面试,感觉真的是查缺补漏啊。
下面看一下单例模式,基本思想就是将构造器修饰符改为private
,然后用一个public
方法去得到类实例。
- 双重锁定单例模式:
public class Singleton {
private Singleton(){}
private static Singleton instance;
private static Object obj = new Object();
public static Singleton getInstance() {
if (instance==null){//先判断实例是否存在,不存在加锁
synchronized (obj) {
if (instance == null){//如果两个线程的instance都为null,都会进入第一个if,
instance = new Singleton();//这时候一个线程加锁,另一个线程等待释放锁,然后new了一个实例,这时候又两个实例,所以要判断两次null
}
}
}
return instance;
}
}
- 内部类单例模式
public class Singleton {
private static class SingletonHolder{
private static final Singleton instance = new Singleton();
}
private Singleton(){}
public static final Singleton getInstance(){
return SingletonHolder.instance;
}
}