class SingleDemoOld{
private static SingleDemoOld instance = null;
private SingleDemoOld(){
System.out.println(Thread.currentThread().getName()+"\t"+"构造方法SingleDemoOld");
}
public static synchronized SingleDemoOld getInstance(){
if(instance == null){
instance = new SingleDemoOld();
}
return instance;
}
}
public class SingleDemo {
public static void main(String[] args) {
for(int i = 0;i<10;i++){
new Thread(() ->{
SingleDemoOld.getInstance();
}).start();
System.out.println(Thread.currentThread().getName()+"\t"+String.valueOf(i));
}
}
}
class SingleDemoNew{
private static volatile SingleDemoNew instance = null;
private SingleDemoNew(){
System.out.println(Thread.currentThread().getName()+"\t"+"构造方法SingleDemoNew");
}
public static SingleDemoNew getInstance(){
if(instance ==null){
synchronized (SingleDemoNew.class){
if(instance == null){
instance = new SingleDemoNew();
}
}
}
return instance;
}
}
public class SingleDemo {
public static void main(String[] args) {
for(int i = 0;i<10;i++){
new Thread(() ->{
SingleDemoNew.getInstance();
}).start();
System.out.println(Thread.currentThread().getName()+"\t"+String.valueOf(i));
}
}
}