懒汉式
public class SingleBean {
/**
* 懒汉式
*/
// 当重排序成 1 -> 3 -> 2 的时候可能出问题
// 通过 volatile 修复
private static volatile SingleBean Instance = null;
public SingleBean() {
}
public static SingleBean getInstance() {
if(Instance==null){
synchronized (SingleBean.class){
/**此处对类加锁,如果在线程1发现instance为空后,线程2抢占到了执⾏权,也进⾏了判断,
接着两个线程都发现instance为空,将会创建两个不同的instance对象返回,所以这就不能保证单例模式,即不是线程安全的。**/
if (Instance ==null){// 抢到锁后再次检验,保证只会被实例化一次
Instance = new SingleBean();
}
}
}
return Instance;
}
}
饿汉式
public class SingleBean2 {
private static final SingleBean2 Instance = new SingleBean2();
//饿汉式
public SingleBean2(){
}
public static SingleBean2 getInstance() {
return Instance;
}
}