public class Singleton {
public static volatile Singleton singleton = null ;
private Singleton(){}
public static Singleton getInstance(){
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
public void saySome(){
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("随便输出点什么东西吧");
}
public static void main(String[] args) {
for (;;){
new Thread(){
@Override
public void run() {
Singleton.getInstance().saySome();
}
}.start();
}
}
}
这里主要是强调 volatitle 关键字,不允许指令重排,防止出错,经过多次测试也没有出现问题