单例模式一
//单例一
public class Singleton{
private static Singleton instance;
private Singleton(){};
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
这种写法虽然是多线程安全的,但是每次使用getInstance方法都需要进行同步,因此,效率比较低。
单例模式二
//单例二
public class Singleton{
private volatile static Singleton singleton;
private Singleton(){}
public static Singleton getSingleton(){
if(singleton == null){
synchronized(Singleton.class){
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
这种方法会首先判断singleton是否为空,这个对象一旦被创建,
在后期的调用过程中就不会进入同步的代码,因此,有更高的效率