我有一个多线程应用程序和一个单例类:
public final class Singleton { private static MyClass mc; public static final Object getInstance() { if(mc == null) { mc = new MyClass(); } return mc; } }
当然,这在一般的多线程场景中不起作用.但请考虑以下情形:
>一开始只有一个线程
>这一个线程第一次调用getInstance(),以便初始化mc.
>之后,第一个线程启动所有其他线程.
我的假设:
这应该有效,因为mc字段的初始化和对象的构造发生在所有后续的Thread.start()调用启动其他线程之前.并且线程的Thread.start()在该线程的所有其他操作之前发生.因此,mc的初始化发生在所有其他线程中的所有操作之前,以便getInstance()将为所有线程返回正确的值.
这个假设是对的吗?为什么/为什么不呢?