世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一种不断追求完美的过程。
public class Single {
public static void main(String[] args) {
System.out.println(Single1.getInstance());
System.out.println(Single2.getInstance());
System.out.println(Single3.getInstance());
System.out.println(Single4.getInstance());
}
/**
* 静态内部类实现
*/
static class Single1 {
private Single1() {};
public static Single1 getInstance() {
return Sin.SINGLE;
}
private static class Sin {
private static final Single1 SINGLE = new Single1();
}
}
/**
* 双检锁实现
*/
static class Single2 {
private Single2() {}
private static Single2 SINGLE;
public static Single2 getInstance() {
if (null == SINGLE) {
synchronized (Single2.class) {
if (null == SINGLE) {
SINGLE = new Single2();
}
}
}
return SINGLE;
}
}
/**
* 线程安全的实现
*/
static class Single3 {
private Single3() {}
private static Single3 SINGLE;
public synchronized static Single3 getInstance() {
if (null == SINGLE) {
SINGLE = new Single3();
}
return SINGLE;
}
}
/**
* 线程不安全的实现
*/
static class Single4 {
private Single4() {}
private static Single4 SINGLE;
public static Single4 getInstance() {
if (null == SINGLE) {
SINGLE = new Single4();
}
return SINGLE;
}
}
}