杰克逊图书馆的ObjectMapper
classseems 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及以上版本,可以通过注意到还有一种更好的方法来增加上述内容:使用ObjectWriter
和ObjectReader
对象,这些对象可以由ObjectMapper
构建。
它们是完全不可变的,线程安全的,这意味着在理论上甚至不可能导致线程安全问题(如果代码试图重新配置实例,则使用ObjectMapper
可能会发生这种问题)。