餓漢式:
public class A {
private static A a = new A();
private A() {
}
public static A getInstance() {
return a;
}
}
懶漢式:(線程不安全)
public class A {
private static A a = null;
private A() {
}
public static A getInstance() {
If a == null {
A = new A();
}
return a;
}
}
懶漢式:(線程安全方式但不推薦)
public class A {
private static A a = null;
private A() {
}
public static synchronized A getInstance() {
If a == null {
A = new A();
}
return a;
}
}
懶漢式:(線程安全方式但有幾率出錯(cuò)拷肌,因?yàn)閷ο蟮膬?nèi)存申請和初始化不同步的原因)
public class A {
private static A a = null;
private A() {
}
public static synchronized A getInstance() {
synchronized (A.class){
If a == null {
A = new A();
}
}
return a;
}
}
靜態(tài)內(nèi)部類方式:(推薦)
public class A {
private static class AHolder {
private static A a = new A();
}
private A (){}
public static A getInstance() {
return AHolder.a;
}
}