单例模式常见有哪几种?
package com.zhuyca.singleton; // 饿汉式 public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } // 懒汉式 class Singleton2 { private static Singleton2 instance = null; private Singleton2() {} public static Singleton2 getInstance() { if(instance == null) { instance = new Singleton2(); } return instance; } } // 懒汉加锁 class Singleton3 { private static Singleton3 instance = null; private Singleton3() {} public static synchronized Singleton3 getInstance() { if(instance == null) { instance = new Singleton3(); } return instance; } } // 懒汉双检锁 class Singleton4 { private static Singleton4 instance = null; private Singleton4() {} public static Singleton4 getInstance() { if(instance == null) { synchronized(Singleton4.class) { if(instance == null) { instance = new Singleton4(); } } } return instance; } } // 静态内部类实现单例 class Singleton5 { private Singleton5() {} public static final Singleton5 getInstance() { return SingletonHolder.INSTANCE; } private static class SingletonHolder { private static final Singleton5 INSTANCE = new Singleton5(); } }
参考链接:http://developer.51cto.com/art/201804/569738.htm