java 单例模式 恶汉 懒汉 静态内部类 线程安全
/**
** @Description: 恶汉(每次都会实例化)
* @Author TT_YT
* @Date 2018年3月3日 上午11:31:00
*/
class EHan{
private EHan(){}
private static EHan eHan = new EHan();
public static EHan getInstacen(){
return eHan;
}
}
/**
*
* @Description: 懒汉(线程安全性能低)
* volatile 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
* @Author TT_YT
* @Date 2018年3月3日 上午11:31:00
*/
class LHan{
private volatile static LHan lHan;
private LHan(){}
public static LHan getInstacen(){
if(null == lHan){
synchronized(LHan.class){
if(null == lHan){
return new LHan();
}
}
}
return lHan;
}
}
/**
*
* @Description: 静态内部类(JVM保证在类加载的过程中static代码块在多线程或者单线程下都正确执行,
* 且仅执行一次。解决了延迟加载以及线程安全的问题。)
* @Author TT_YT
* @Date 2018年3月3日 上午11:31:00
*/
class InnerHan{
private InnerHan(){}
private static class Inner{
private static InnerHan innerHan=new InnerHan();
}
public static InnerHan getInstacen(){
return Inner.innerHan;
}
}