当两个线程同时调用"getInstance()"时,Singleton如何表现?

xpo*_*con 5 java singleton design-patterns

当两个线程同时调用"getInstance()"时,Singleton如何表现?保护它的最佳做法是什么?

Boh*_*ian 3

首先,两个线程不能“同时”调用该方法 - 一个线程将被视为首先调用它......称为“竞争条件”。

接下来,任何正确实现的单例都将干净地处理竞争条件。恕我直言,这是在没有同步的情况下实现线程安全单例的最干净的方法:

public class MySingleton {
    private static class Holder {
        static final MySingleton INSTANCE = new MySingleton ();
    }

    public static MySingleton getInstance() {
        return Holder.INSTANCE;
    }
    // rest of class omitted
}
Run Code Online (Sandbox Code Playgroud)

这称为按需初始化持有者习惯用法