我正在扩展图书馆以为我做一些工作。这是代码:
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
,则不会,总体而言,这不是线程安全的:decompile
之外的另一种方法在线程上运行当decompile
方法使用地图时,其他线程可能会修改地图,可能会导致混乱。 :-)
您可能会查看 java.util.concurrent
命名空间中的类(例如 ConcurrentHashMap
),以查看其中是否有任何适用于您所做的工作的类。
编辑(响应您的评论。)如果静态成员namesMap
仅由decompile
使用,而不由其他任何东西使用(您没有对其他任何东西的引用,等等),那么您就可以了。如果它被使用的唯一位置是序列化的,那么它是静态的事实并不重要。