近半年来,我面试了大概100多个Java后端程序员,线程安全的单例模式也是最常问到的一个问题。那么看看大家都是怎么样回答的呢。
第一种:不考虑线程安全的单例
/*** 线程不安全的单例*/
public class Singleton {
/*** 静态成员变量保存实例值*/
private static Singleton singleton;
/*** 构造函数私有避免被其他类实例化*/
private Singleton(){
}
/*** 静态函数返回实例* @return Singleton*/
public static Singleton getInstance(){
if(null == singleton){
singleton = new Singleton();
}
return singleton;
}
}
一般初级的Java程序员会这么写,该单例模式中没有使用同步块,但是具备了单例模式的基本特征:构造函数私有
静态成员变量
静态函数返回实例
第二种:饿汉式
/*** 饿汉式*/
public class Singleton {
private static Singleton singleton=new Singleton();
private Singleton(){
}
public static Singleton getInstance(){