vlambda博客
学习文章列表

重温三种创建单例模式的方式(面试)

一,饿汉式(第一次调用就创建对象占用内存空间)

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;}