作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在扩展一个库来为我做一些工作。这是代码:
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/
我是一名优秀的程序员,十分优秀!