繁体   English   中英

这是Singleton线程安全的线程吗? 我看不出来

[英]Is this Singleton a thread safe one ? I can't see how?

考虑单例:

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

    private MySingleton() 
    {
        if (Nested.INSTANCE != null) 
        {
            throw new IllegalStateException("Already instantiated");
        }
    }

    public static MySingleton getInstance() 
    {
        return Nested.INSTANCE;
    }
}

我没有锁,但是为什么这是解决Singleton问题的线程安全解决方案?

我没有锁,但是为什么这是解决Singleton问题的线程安全解决方案?

因为类变量是在其声明类初始化且类在锁之后初始化时初始化的。 Java语言规范的“ 详细初始化过程”一章中描述了该过程

当您的客户端代码调用getInstance ,相应的线程将尝试访问Nested.INSTANCE 如果Nested尚未初始化,则当前线程将获取该类的初始化锁并将其初始化。 初始化过程的一部分将初始化final类字段INSTANCE

请注意,在您给出的示例中,让Nested类成为INSTANCE的持有者没有任何意义,您可能还具有MySingleton类中的字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM