Jackson 库的 ObjectMapper
类 seems to be thread safe .
这是否意味着我应该将我的 ObjectMapper
声明为像这样的静态字段
class Me {
private static final ObjectMapper mapper = new ObjectMapper();
}
而不是像这样的实例级字段?
class Me {
private final ObjectMapper mapper = new ObjectMapper();
}
最佳答案
是的,这是安全且推荐的。
您引用的页面中唯一需要注意的是,一旦共享映射器,您就不能修改映射器的配置;但是您没有更改配置,所以这很好。如果您确实需要更改配置,您可以从静态 block 中进行,也可以。
编辑:(2013/10)
对于 2.0 及以上版本,可以通过注意有一个更好的方法来扩充上述内容:使用 ObjectWriter
和 ObjectReader
对象,它们可以由 构造对象映射器
。
它们是完全不可变的、线程安全的,这意味着在理论上甚至不可能导致线程安全问题(如果代码尝试重新配置实例,ObjectMapper
可能会发生这种问题)。
https://stackoverflow.com/questions/3907929/