单例模式:当前类在内存中只有一个对象
单例模式的实现条件
1.私有的静态的当前类作为属性
2.私有的构造方法
3.公有的静态的方法返回当前类对象
单例模式的两种实现
1.饿汉式
优点:实现简单,没有线程同步问题(类加载器只加载一次)
缺点:在某些特定情况下会耗费内存
2.懒汉式
优点:特定条件下节约了内存
缺点:多线程环境中,不能保证单例模式(原因:线程AB同时调用getInstance()方法)
饿汉式
public class EHanShi {
//私有的静态的当前类对象作为属性
private static EHanShi instance = new EHanShi();
//私有的构造方法
private EHanShi() {
}
//共有的静态的当前方法返回该实例
public static EHanShi getInstance(){
return instance;
}
}
DCL双检查机制实现懒汉式(没有线程安全问题)
/**
* DCL双检索机制实现懒汉式
*/
public class LanHanShi {
//私有的静态的当前类对象作为属性
private static LanHanShi instance;
//私有的构造方法
private LanHanShi() {
}
//共有的静态的当前方法返回该实例
public static LanHanShi getInstance(){
//第一次检查instance是否被实例化出来
if (instance==null){
synchronized (LanHanShi.class){
//第二次检查instance是否被实例化出来
if (instance==null){
instance = new LanHanShi();
}
}
}
return instance;
}
}