我正在扩展图书馆以为我做一些工作。这是代码:

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使用,而不由其他任何东西使用(您没有对其他任何东西的引用,等等),那么您就可以了。如果它被使用的唯一位置是序列化的,那么它是静态的事实并不重要。

10-07 22:26