重温三种创建单例模式的方式(面试)
一,饿汉式(第一次调用就创建对象占用内存空间)
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;}
