主要思想:构造器私有
饿汉式单例:可能存在浪费空间。
public class Test {
//构造器私有
private Test(){
}
private final static Test test=new Test();
//对外提供访问构造器的方法
public static Test getInstance(){
return test;
}
}
懒汉式单例:可能存在多线程并发的问题,使用DCL懒汉式解决多线程并发问题。
public class Test {
//构造器私有
private Test(){
}
private volatile static Test test;
//双重检测锁模式 DCL懒汉式
public static Test getInstance(){
if(test==null){
synchronized (Test.class){
if (test==null){
test=new Test();
}
}
}
return test;
}
}
双重检测锁模式可以会造成test=new Test();不是一个原子性的操作(指令可能会重排),所以加上volatile关键字。volitile保证不发生指令重排。
原子性操作:分配内存空间、执行构造方式,初始代对象、把这个对象指向内存。