重温三种创建单例模式的方式(面试)
一,饿汉式(第一次调用就创建对象占用内存空间)
public class EHan {
public EHan() {
}
private static EHan eHan=new EHan();//直接创建对象
public static EHan geteHan() {
return eHan;
}
}
二,懒汉式(需要创建对象时才创建,否则不占用内存空间)
(1) 单线程懒汉式
public class LanHan {
public LanHan() {
}
private static LanHan lanHan;
public static LanHan getLanHan() {
if (lanHan==null){
return new LanHan();//调用时才创建对象
}
return lanHan;
}
}
(2) 考虑线程安全懒汉式
public class LanHan {
public LanHan() {
}
private static volatile LanHan lanHan;//volatile保证所有线程可见
public static LanHan getLanHan() {
synchronized (LanHan.class) {//加锁防止创建多个对象
if (lanHan == null) {
return new LanHan();
}
}
return lanHan;
}
}
(3) 兼顾效率和线程安全懒汉式
public class LanHan {
public LanHan() {
}
private static volatile LanHan lanHan;
public static LanHan getLanHan() {
if (lanHan == null) {//避免每次调用对象都加锁排队浪费时间
synchronized (LanHan.class) {
if (lanHan == null) {
return new LanHan();
}
}
}
return lanHan;
}
}
三,枚举式(effective java推荐使用)
public enum EasySingleton{
INSTANCE;
}