gpt4 book ai didi

Java静态和线程安全或做什么

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:57:45 28 4
gpt4 key购买 nike

我正在扩展一个库来为我做一些工作。这是代码:

public static synchronized  String decompile(String source, int flags,UintMap properties,Map<String,String> namesMap)
{
Decompiler.namesMap=namesMap;
String decompiled=decompile(source,flags,properties);
Decompiler.namesMap=null;
return decompiled;

}

问题是 namesMap 是静态变量。该线程是否安全?因为如果此代码同时运行,namesMap 变量可能会更改。我能为此做什么?

最佳答案

方法 decompile 是线程安全的(它永远不会同时在两个线程上运行),但是如果任何不是那个方法也使用 namesMap,那么不,总的来说这不是线程安全的:other 在不同线程上运行的 decompile 的另一种方法可以修改map 而 decompile 方法正在使用它,大概会造成困惑。 :-)

您可以查看 java.util.concurrent 中的类命名空间(例如,ConcurrentHashMap),看看其中是否有任何适用于您正在做的事情。

编辑(回应您的评论。)如果静态成员namesMap 只被反编译使用过而不是其他任何东西(你没有得到任何其他东西的引用,等等),那么你就没事了。如果它唯一使用的地方是序列化的,那么它是静态的这一事实并不重要。

关于Java静态和线程安全或做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2676829/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com