我有一个带有静态变量的类,如下所示
private static Object sMyStaticVar;
如果我想在构造函数中为这个 var 赋值,我有这样的代码
if(sMyStaticVar == null) sMyStaticVar = new CustomObject(someRuntimeObject);
where someRuntimeObject
是一个在加载我的类时不可用的对象,因此阻止我声明我的静态变量,如下所示
private static Object sMyStaticVar = new CustomObject(someRuntimeObject);
我的问题是,构造函数线程中 static var 对象的初始化是否安全?我的直觉告诉我它不是,我应该使用非运行时类类型作为锁进行同步,如下所示
synchronized(MyClass.class)
{
if(sMyStaticVar == null) sMyStaticVar = new CustomObject(someRuntimeObject);
}
(与从获得的运行时类型相反getClass()
)
但由于我的直觉通常是错误的,如果有人能为我阐明这一点,我将不胜感激!
如果它是静态的,则不应在构造函数中分配它。创建一个静态初始化方法来执行此操作public static synchronized void initialize(someRuntimeObject)
.
请注意synchronized
关键字:与synchronizing on相同MyClass.class
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)