懒汉式(线程安全,同步代码块儿)

代码演示

// 懒汉式 (线程安全_ 同步放法_)
class Singleton{
    private static Singleton instance;

    private Singleton() {

    }
    // 提供一个静态的公有方法 加入了同步处理的代码
    // 解决线程安全问题
    // 即懒汉式
    // 我们在这里加一个关键字 synchronized
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized(Singleton.class){
                instance = new Singleton();
            }
        }
        return instance;
    }
}

优缺点说明

  1. 这总方式,本意是想对于第四种实现方式的改进,因为前面同步方法效率太低, 改为同步产生实例化的的代码块
  2. 但是这种同步并不能起到线程同步的作用,跟第三种实现方式遇到的情形一致,假如一个线程进入了if(singleton == null)判断语句块儿,还未来得及往下执行,另一个线程也通过了这个判断语句,这时便会产生多个实例

  3. 结论:在实际开发中,不能使用这种方式(没多大卵用)


results matching ""

    No results matching ""