带枚举的单例 vs 带双重检查锁定的单例

pet*_*ter 4 java singleton multithreading

我想知道在多线程环境中实践中哪个更好。我将 Singleton 理解为 Enum 类型在加载类时创建一个实例。除此之外,我没有看到任何其他重要的东西。有什么优点和缺点吗?

单例Enum类型:

 public enum Singleton {
      INSTANCE;
      public void doSomething(){ ... }
 }
Run Code Online (Sandbox Code Playgroud)

单身人士double-checked locking

 public class Singleton{
      private volatile static Singleton instance;

      private Singleton(){}
      public static Singleton getInstance(){
           if(instance == null){
                 synchronized(Singleton.class){
                       if(instance == null){
                           instance = new Singleton();
                       }
                 }
           }
           return instance;
      }

 }
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 5

通常在多线程应用程序中,更简单、更容易理解的代码更容易工作。

在我看来,第一个例子是显著比第二个简单的,这是最重要的。

使用 an 的主要优点enum是它更简单,更复杂的例子是不合理的。双锁示例允许您以有趣的方式为单元测试更改单例,但我相信这给您带来的问题可以用另一种方式解决。