如何使单例类线程安全?

AJ.*_*AJ. 5 java singleton class-design class

我在Java中实现一个单例类,以确保只创建了一个类的实例.

gus*_*afc 11

制作单身人士的最佳方法是什么?使用枚举.

public enum Singleton {
    INSTANCE;
    public void foo(){ ... }
}

// Usage:
Singleton.INSTANCE.foo();
Run Code Online (Sandbox Code Playgroud)

您可以从VM获得大量帮助,不仅可以避免双重实例化,还可以帮助您避免反序列化损坏.


Mic*_*rdt 6

也许最好的方法是使用带有单个实例的枚举.这样做的另一个好处是可序列化并保证对序列化和反射的单一性,这没有"直截了当"的Singleton实现(私有?我有反思,我嘲笑你的访问修饰符!).它的实现也非常简单:

public enum Singleton {
    INSTANCE;

    // fields and methods go here
}
Run Code Online (Sandbox Code Playgroud)