package designpattern.singleton; public class HungrySingleton { private static HungrySingleton instance = new HungrySingleton();// 静态初始化 private HungrySingleton() {// 私有化构造方法 } public static HungrySingleton GetInstance() {// 获取实例,static的 return instance; } }
package designpattern.singleton; public class LazySingleton { private static LazySingleton instance; private LazySingleton() {// 私有化构造方法 } public static LazySingleton getInstance() {// 获取实例,static的 if (instance == null) { instance = new LazySingleton();// 方法中创造实例 } return instance; } }
package designpattern.singleton; public class LazySingleton2 { private static LazySingleton2 instance; private LazySingleton2() { } public static synchronized LazySingleton2 getInstance() {// synchronized 修饰 if (instance == null) { instance = new LazySingleton2(); } return instance; } }
package designpattern.singleton; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class LazySingleton3 { private static LazySingleton3 instance; private static Lock lock = new ReentrantLock(); private LazySingleton3() { } public static synchronized LazySingleton3 getInstance() { try { if (instance == null) { lock.lock(); if (instance == null) {// 有必要再次判断,不然还是存在线程安全问题 instance = new LazySingleton3(); } lock.unlock(); } } finally {// 保证锁被释放 lock.unlock(); } return instance; } }
原文:https://www.cnblogs.com/imoqian/p/10986927.html