public class EagerlySingleton { //單例類
private static EagerlySingleton instance = new EagerlySingleton();
private EagerlySingleton() {
}
public static EagerlySingleton getInstance() {
return instance;
}
}
public class App{ //測試
public static void main(String[] args) {
EagerlySingleton eSingleton1 = EagerlySingleton.getInstance();
EagerlySingleton eSingleton2 = EagerlySingleton.getInstance();
System.out.println("eSingleton1=" + eSingleton1);
System.out.println("eSingleton2=" + eSingleton2);
}}
輸出:
eSingleton1=EagerlySingleton@487f6155
eSingleton2=EagerlySingleton@487f6155
public class LazySingleton {
private static LazySingleton instance = null;
private LazySingleton() {
}
public synchronized static LazySingleton getInstance() { //synchronized
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
public enum EnumSingleton {
INSTANCE;
@Override
public String toString() {
return getDeclaringClass().getCanonicalName() + "@" + hashCode();
}
}
<pre name="code" class="java">public class App {
public static void main(String[] args) {
EnumSingleton enumSingleton1 = EnumSingleton.INSTANCE;
EnumSingleton enumSingleton2 = EnumSingleton.INSTANCE;
System.out.println("enumSingleton1=" + enumSingleton1); // enumSingleton1=EnumSingleton@298792720
System.out.println("enumSingleton2=" + enumSingleton2); // enumSingleton2=EnumSingleton@298792720
<span style="white-space:pre"> </span>}
}
import java.io.Serializable;
public class InitializingOnDemandHolderIdiom implements Serializable{
private static final long serialVersionUID = 1L;
private static class HelperHolder {
public static final InitializingOnDemandHolderIdiom INSTANCE = new InitializingOnDemandHolderIdiom();
}
public static InitializingOnDemandHolderIdiom getInstance() {
return HelperHolder.INSTANCE;
}
private InitializingOnDemandHolderIdiom() {
}
protected Object readResolve() {
return getInstance();
}
}
public class App {
public static void main(String[] args) {
InitializingOnDemandHolderIdiom demandHolderIdiom = InitializingOnDemandHolderIdiom.getInstance();
System.out.println(demandHolderIdiom);<span style="white-space:pre"> </span> //InitializingOnDemandHolderIdiom@528f2588
InitializingOnDemandHolderIdiom demandHolderIdiom2 = InitializingOnDemandHolderIdiom.getInstance();
System.out.println(demandHolderIdiom2); //InitializingOnDemandHolderIdiom@528f2588
<span style="white-space:pre"> </span>}
}
public class DoubleCheckLocking {
private static volatile DoubleCheckLocking INSTANCE;
private DoubleCheckLocking() {
//反射
if(INSTANCE != null)
throw new IllegalStateException("initialized.");
}
public static DoubleCheckLocking getInstance() {
DoubleCheckLocking result = INSTANCE;
if (result == null) {
synchronized (DoubleCheckLocking.class) {
result = INSTANCE;
if (result == null) {
INSTANCE = result = new DoubleCheckLocking();
}
}
}
return result;
}
}
public class App {
public static void main(String[] args) {
DoubleCheckLocking dcl1 = DoubleCheckLocking.getInstance();
System.out.println(dcl1); //DoubleCheckLocking@487f6155
DoubleCheckLocking dcl2 = DoubleCheckLocking.getInstance();
System.out.println(dcl2); //DoubleCheckLocking@487f6155
}
}
@斗大的熊貓