懒汉式:
//饿汉模式 public class EagerSington { //方式一:创建静态变量 private static EagerSington eagerSington = new EagerSington(); //方式二:创建静态代码块 private static EagerSington eagerSington1; static { eagerSington1 = new EagerSington(); } private EagerSington() { } public static EagerSington getInstance(){ return eagerSington; } public static EagerSington getInstancePiece(){ return eagerSington1; } } //方式三:枚举 public enum EagerSingtonEnum { FIRST,SECOND; EagerSingtonEnum() { } }
//懒汉模式 public class IdlerFirst { private static IdlerFirst idlerFirst; private IdlerFirst() { } public static IdlerFirst getInstance(){ //判断对象是否为空,但是线程不安全 if (idlerFirst == null){ idlerFirst = new IdlerFirst(); } return idlerFirst; } }
public class IdlerSecond { private static IdlerSecond idlerSecond; private IdlerSecond() { } public static IdlerSecond getInstance(){ //容易进入堵塞 synchronized (IdlerSecond.class){ if (idlerSecond == null){ idlerSecond = new IdlerSecond(); } return idlerSecond; } } }
public class IdlerThird { private static volatile IdlerThird idlerThird; private IdlerThird() { } public static IdlerThird getInstance(){ //双重检查锁 if (idlerThird == null){ synchronized (IdlerThird.class){ if (idlerThird == null){ idlerThird = new IdlerThird(); } } } return idlerThird; } }
public class IdlerFourth { private static IdlerFourth idlerFourth; private IdlerFourth() { } //通过静态内部类实现单例 private static class IdlerInner{ static { idlerFourth = new IdlerFourth(); } private static IdlerFourth getInstance(){ return idlerFourth; } } public static IdlerFourth getInstance(){ return IdlerInner.getInstance(); } }