package demo.one;
/**
*
* 单例设计模式 1:饿汉式 2:懒汉式(又称单例模式的延迟加载)
*
*/
public class Single {
/** 这里的整个是饿汉式的单例模式
private static final Single single = new Single();
private Single() {
}
public static Single getInstance() {
return single;
}
*/
/********以下是单例模式中的懒汉式 也称单例模式的延迟加载****************/
private static Single single=null;
/** 注意这里是不考虑多线程的时候的单例模式
public static Single getInstance(){
if(single==null)
single=new Single();
return single;
}
*/
//下面是考虑多线程的延迟加载的单例模式
public static Single getInstance(){
if(single==null){
synchronized(Single.class){
if(single==null)
single=new Single();
}
}
return single;
}
/**
* 以上是多线程的单例延迟加载模式
* 注意这里面试经常问的问题
* 1:让你写一个延迟加载的单例模式就写这个
* 2:synchronized(Single.class)多线程中的锁为什么用的是Single.class
* 因为哲理是一个static,多线程中对static的加锁是它的对象的.class,也就是该对象所属的字节码对象
* 3:双重if是为了解决多线程的效率问题,这样只有第一次和第二次会判断它的锁,之后不会了
*/
}
|