luaj で次のコード スニペットを見つけましたMap
が、同期が行われていないため、構築後に行われた変更が他のスレッドに表示されない可能性があるのではないかと疑い始めました。
が final と宣言されているため、構築後に初期化された値が他のスレッドから見えることはわかっていMap
ますが、その後に発生する変更についてはどうでしょうか。
このクラスはスレッドセーフではないため、マルチスレッド環境で強制を呼び出すと、で無限ループが発生する可能性があることに気付く人もいるかもしれません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 ...;
}
...
}