package singleton; /** * @author BianWenKai * @DATE 2021/10/12 - 9:54 **/ public class Singleton { //懒汉式 private static Singleton uniqueInstance = null; private Singleton(){} //多线程下会产生多个实例变量,所以通过增加synchronized关键字在实例化方法中,迫使每个线程在进入该方法之前,必须等别的线程离开该方法,即不能有多个线程同时进入该方法。 public static synchronized Singleton getInstance(){ if (uniqueInstance == null){ uniqueInstance = new Singleton(); } return uniqueInstance; } }
package singleton; /** * @author BianWenKai * @DATE 2021/10/12 - 13:07 **/ public class SingletonOfDoubleCheckedLock { //通过volatile关键字,确保多线程正确的处理 uniqueInstance 变量 private volatile static SingletonOfDoubleCheckedLock uniqueInstance; private SingletonOfDoubleCheckedLock(){} //检查实例是否创建,如果尚未创建,则进行同步。这样只有第一次会同步。 public SingletonOfDoubleCheckedLock getInstance(){ if (uniqueInstance == null) { synchronized (SingletonOfDoubleCheckedLock.class) { if (uniqueInstance == null) { uniqueInstance = new SingletonOfDoubleCheckedLock(); } } } return uniqueInstance; } }
package singleton; /** * @author BianWenKai * @DATE 2021/10/12 - 10:45 **/ public class SingletonOfEagerly { //饿汉式 private static SingletonOfEagerly uniqueInstance = new SingletonOfEagerly(); private SingletonOfEagerly(){} //多线程下会产生多个实例变量,所以通过增加synchronized关键字在实例化方法中,迫使每个线程在进入该方法之前,必须等别的线程离开该方法,即不能有多个线程同时进入该方法。 public static SingletonOfEagerly getInstance(){ return uniqueInstance; } }
Loading Comments...