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

Gor*_*Ape 3 java thread-safety

我正在扩展一个图书馆,为我做一些工作.这是代码:

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;

    }
Run Code Online (Sandbox Code Playgroud)

问题是namesMap静态变量.该线程是否安全?因为如果这段代码运行得很简单,那么namesMap变量可能会改变.我能为此做些什么?

T.J*_*der 5

方法 decompile是线程安全的(它永远不会被两个线程同时运行),但如果什么比方法等也使用了namesMap,那么没有,总体而言,这不是线程安全的:另一种方法decompile在不同的线程运行的可能在decompile方法使用时修改地图,可能会造成混乱.:-)

您可以查看java.util.concurrent命名空间中的类(例如,ConcurrentHashMap),看看是否有任何类适用于您正在执行的操作.

编辑如果静态成员(在回答您的评论.)namesMap唯一使用过decompile,而不是由其他任何(你不会对它的引用到别的,等等),那么你的罚款.它是一个静态的事实并不重要,如果它使用的唯一地方是序列化的.