/**
* Created by Mr.Wang on 2019/2/17.
*/
public class LazyMan {
private static LazyMan lazyMan = null;
private LazyMan(){
System.out.print("....Do Something.....");
}
/**
* 此方法没有考虑到多线程
* 多个线程同时进入,有可能会产生多个实例,不再是单例
* @return
*/
public static LazyMan method1(){
if(lazyMan == null){
lazyMan = new LazyMan();
}
return lazyMan;
}
/**
* 此方法避免了多线程产生多实例的可能
* 但将整个方法锁住,影响性能
* @return
*/
public static synchronized LazyMan method2(){
if(lazyMan == null){
lazyMan = new LazyMan();
}
return lazyMan;
}
/**
* 使用双重判断
* 既保证了单一实例,又提高了速度
* @return
*/
public static LazyMan method3(){
if(lazyMan == null){
synchronized (LazyMan.class) {
if(lazyMan == null){
lazyMan = new LazyMan();
}
}
}
return lazyMan;
}
/**
* 使用内部类
* 内部类只在被调用时才会加载
* 保证了延迟加载
* @return
*/
public static LazyMan method4(){
return InnerClass.lazyMan;
}
class InnerClass{
public LazyMan lazyMan = new LazyMan();
}
}