我的类(class)看起来像这样:
public Class A {
private static final ObjectMapper mapper = new ObjectMapper();
public String get(String key) {
JsonNode nod = mapper.readTree(getFromCache(key));
}
}
多个线程将访问此方法。我需要同步它吗?我需要在方法内部移动映射器吗?
最佳答案
这取决于 ObjectMapper
的实现。有关可能的答案,请参阅:
Should I declare Jackson's ObjectMapper as a static field?
无法从您提供的代码示例中分辨出来,因为我们不知道 ObjectMapper
是什么。
要找到答案,您需要查看 ObjectMapper
的 javadoc。否则,实现。
如果您不确定,您可以:
- 在方法中创建一个新的
ObjectMapper
,这样每次都有一个新对象, - 创建一个ThreadLocal,这样每个线程都有自己的对象
在 JVM 上创建对象的成本非常低(除非它们执行扫描类路径等昂贵的操作)。
关于java - 当多个线程正在访问它时,在非静态方法中使用静态对象是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39845202/