我有一个多线程应用程序和一个单例类:
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()
为所有线程返回正确的值。
这个假设正确吗?为什么/为什么不?