饿汉式:
public class SingleTon {
//1、私有化构造器
private SingleTon(){}
//2.在类内部创建一个对象
private static SingleTon instance = new SingleTon();
//3.通过共有的方法调佣,返回单例对象
public static SingleTon getInstance(){
return instance;
}
}
懒汉式
ublic class SingleTon {
//1.私有化构造方法
public SingleTon(){}
//2.在类内部创建一个对象
//volatile:保证内存可见性、有序性(禁止指令重排)
private volatile static SingleTon instance;
//3.在类中添加一个公共的方法,返回单例对象
public static SingleTon getInstance(){
if (instance == null){//目的:提高执行效率 DCL(Double Check Lock)双重检查锁
synchronized (SingleTon.class){
if (instance == null){
instance = new SingleTon();
//这句话的执行过程:
//1.在堆中开辟空间,所有属性赋默认值
//2.执行构造方法
//3.给局部变量赋值
//jvm优化为132
}
}
}
return instance;
}
}
懒汉式是线程不安全的。
静态内部类的方式:
静态内部类结合了懒汉式和饿汉式的优点既保证了线程安全,又节省空间
public class SingleTon {
//创建私有的构造方法
private SingleTon(){
}
//2.在类内部创建一个对象,不使用静态内部类的成员不会加载
private static class Holder{
private static final SingleTon instance = new SingleTon();
}
//3.定义一个公开的方法来获得单例对象
public static SingleTon getInstance(){
return Holder.instance;
}
}