您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么私有静态字段= new Singleton在Java中并不懒惰?

为什么私有静态字段= new Singleton在Java中并不懒惰?

基本上,这是懒惰的问题。这是懒在直到类初始化它不会构建单,但它是在渴望有 可能 是情况下,您要使用的类没有初始化的单身本身。

例如:

public final class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }

    public static void sayHello() {
        System.out.println("Hello!");
    }
}

调用Singleton.sayHello()将实例化单例,即使我们不希望它…也因此没有那么懒。

您可以使用嵌套类型来解决此问题:

public final class Singleton {
    private Singleton() {}

    public static Singleton getInstance() {
        return Holder.instance;
    }

    public static void sayHello() {
        System.out.println("Hello!");
    }

    private static class Holder {
        private static final Singleton instance = new Singleton();
    }
}

现在Singleton.Holder将仅通过使用getInstance方法进行初始化。它是惰性的并且是线程安全的,没有锁定。

以我的经验,通常单例类的 唯一 静态方法getInstance方法在这种情况下,它们是等效的(例如,假设您不使用反射以某种方式初始化类型)。

java 2022/1/1 18:32:29 有522人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶