饿汉模式
1.定义一个private static final 单例类初始化变量
2.构造函数private
3.定义一个static返回单例类的方法
懒汉模式
1.定义一个private static单例类未初始化变量
2.构造函数private
3.定义一个static返回单例类的方法,判断无实例时返回单例类实例
这时有线程安全问题。
懒汉双重检查模式
1.定义一个private static volatile单例类未初始化变量
2.构造函数private
3.定义一个static返回单例类的加同步块的方法,判断无实例时返回单例类实例
public class Mgr06 { private static volatile Mgr06 Instance; private Mgr06() { } public static Mgr06 getInstance() { if (Instance == null) { synchronized (Mgr06.class) { if(Instance == null){ try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } Instance = new Mgr06(); } } } return Instance; } }
内部类单例
1.私有化构造
2.定义一个私有的static内部类,内部类里定义一个static的单例类并实例化
3.定义一个获取内部类变量并返回的方法
枚举单例
public enum Mgr08 { INSTANCE; public void m(){ } public static void main(String[] args) { for(int i=0; i<100; i++) { new Thread(()->{ System.out.println(Mgr08.INSTANCE.hashCode()); }).start(); } } }