單例模式
一個類隻能建立一個對象
餓漢式 – 可能會浪費空間,并發效率高
class Singleton{
private static Singleton o = new Singleton();
private Singleton(){}
public static Singleton getSingleton(){
return o;
}
}
懶漢式–可能會浪費空間,并發效率低
class Singleton{
private static Singleton o = null;
private Singleton(){}
public static synchronized Singleton getSingleton(){
if(o == null){
o = new Singleton();
}
return o;
}
}
雙重校驗鎖–在保證線程安全的情況下,盡可能的提高并發效率
class Singleton{
private static Singleton o = null;
private Singleton(){}
public static Singleton getSingleton(){
if(o == null){
synchronized(Object.class) {
if(o==null){
o = new Singleton();
}
}
}
return o;
}
}
懶加載–靜态内部類實作
class Singleton{
private Singleton(){}
private static class innerClass{
static Singleton singleton = new Singleton();
}
public static Singleton getSingleton(){
return innerClass.singleton;
}
}