1.懒汉式,线程不安全
public class Demo1 {
private static Demo1 instance;
private Demo1(){}
public static Demo1 getInstance(){
if(instance==null){
instance=new Demo1();
}
return instance;
}
}
2.懒汉式,线程安全
public class Demo2 {
private static Demo2 instance;
private Demo2(){}
public static synchronized Demo2 getInstance(){
if(instance==null){
instance=new Demo2();
}
return instance;
}
}
3.饿汉式:在类装载时就实例化
public class Demo3 {
public static Demo3 instance=new Demo3();
private Demo3(){}
public static Demo3 getInstance(){
return instance;
}
}
4.静态内部类
public class Demo4 {
private static Demo4 instance;
public static class InstanceHolder{
private static final Demo4 instance=new Demo4();
}
private Demo4(){}
public static Demo4 getInstance(){
return InstanceHolder.instance;
}
}
5.双重校验锁:懒汉式线程安全的升级版
public class Demo5 {
private static volatile Demo5 instance;
private Demo5(){}
public static Demo5 getInstance(){
if(instance==null){
synchronized(Demo5.class){
instance=new Demo5();
}
}
return instance;
}
}