文章目录
单例模式实现单例模式的注意点实现单例模式的方式(7种以上)饿汉式双检锁含volatile的懒汉式
单例模式
实现单例模式的注意点
整个程序中只能有一个实例
私有构造器私有实例对象对外提供获取实例对象的静态方法
实现单例模式的方式(7种以上)
饿汉式:登记式:静态内部类枚举式:懒汉式:同步代码块,同步方法双检锁的懒汉式:volatile关键字ThreadLocal:为每个线程提供变量的独立副本,保证各自线程中都是单例的,但是不同线程之间不保证CAS:
new的过程:
分配对象的内存空间初始化对象指向分配的空间 可能出现指令重排
分配对象的内存空间指向分配的空间初始化对象
饿汉式
public class Singleton1 {
private Singleton1() {}
private static Singleton1 instance
= new Singleton1();
public static Singleton1
getSingalton1() {
return instance
;
}
}
双检锁含volatile的懒汉式
public class Singleton2 {
private Singleton2() {}
private static volatile Singleton2 instance
= null
;
public static Singleton2
getInstance() {
if(instance
== null
) {
synchronized (Singleton2
.class) {
if(instance
== null
){
instance
= new Singleton2();
}
}
}
return instance
;
}
}