jackson 图书馆的ObjectMapperseems to be thread safe

这是否意味着我应该像这样将我的ObjectMapper声明为静态字段?

class Me {
    private static final ObjectMapper mapper = new ObjectMapper();
}

而不是像这样的实例级字段?
class Me {
    private final ObjectMapper mapper = new ObjectMapper();
}

最佳答案

是的,建议您这样做是安全的。

您所引用页面的唯一警告是,一旦共享了映射器,您将无法修改它的配置。但是您不更改配置,这样就可以了。如果确实需要更改配置,则可以从静态块执行此操作,也可以。

编辑:(2013/10)

在2.0及更高版本中,可以通过注意到还有更好的方法来增强上述功能:使用ObjectWriterObjectReader对象,它们可以由ObjectMapper构造。
它们是完全不变的,线程安全的,这意味着从理论上讲甚至不可能导致线程安全问题(如果代码尝试重新配置实例,则ObjectMapper可能会发生)。

关于java - 我应该将Jackson的ObjectMapper声明为静态字段吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3907929/

10-12 04:47