饿汉式
// 私有化构造器,防止外部直接new出对象
private Singleton01(){
}
//饿汉式,直接在静态变量中创建对象,优点①线程安全,缺点类加载时间过长
private static Singleton01 singleton01 = new Singleton01();
//暴露出方法返回创建的对象
public static Singleton01 getInstance(){
return singleton01;
}
懒汉式
//私有化构造器
private Singleton02(){
}
//创建静态变量,volatile禁止指令重排&线程可见,但是并不能保证线程安全
private static volatile Singleton02 singleton02;
//懒汉式,优点节省内存,在调用方法时创建对象;缺点:取对象多了两步判断和加了锁,浪费时间
//在jdk8中、list、spring创建对象都是懒汉式,在真正调用增加方法的时候从内存中申请空间
public static Singleton02 getInstance(){
if(singleton02==null){
synchronized(Singleton02.class){
if(singleton02==null){
singleton02 = new Singleton02();
}
}
}
return singleton02;
}