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

标签 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;

    }

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

最佳答案

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

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

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

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

相关文章:

java - Hadoop 2.7.1 中的作业历史记录服务器不工作

java - SQL Java 使用 phpmyadmin 中参数索引超出范围

java - 最佳 Java 线程安全对象池

java - 试过嵌套锁,还是死锁

multithreading - 在JRuby gem中使用线程安全初始化

java - 使用 AspectJ 捕获参数自定义注释

java - HikariCP 中的计算不匹配

java - 使用 Weblogic session 复制进行内存数据库排序

python - 如何实时读取html并循环插入MySQL?

java - 如何修复 java.util.concurrent.CompletionException : java. lang.StackOverflowError