我在 luaj 中找到了以下代码片段,我开始怀疑是否有可能Map
在构建之后对它所做的更改可能对其他线程不可见,因为没有同步到位。
我知道,由于Map
被声明为 final,它在构造后的初始化值对其他线程是可见的,但是在那之后发生的变化呢?
有些人可能还意识到这个类不是线程安全的,以至于在多线程环境中调用 coerce 甚至可能导致HashMap
.
public class CoerceJavaToLua {
static final Map COERCIONS = new HashMap(); // this map is visible to all threads after construction, since its final
public static LuaValue coerce(Object paramObject) {
...;
if (localCoercion == null) {
localCoercion = ...;
COERCIONS.put(localClass, localCoercion); // visible?
}
return ...;
}
...
}