Jackson 库的 ObjectMapper
类 似乎是线程安全 的。
这是否意味着我应该将我的 ObjectMapper
声明为这样的静态字段
class Me {
private static final ObjectMapper mapper = new ObjectMapper();
}
而不是像这样作为实例级字段?
class Me {
private final ObjectMapper mapper = new ObjectMapper();
}
原文由 Cheok Yan Cheng 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的,这是安全的,值得推荐。
您引用的页面中唯一需要注意的是,一旦共享映射器,您就无法修改它的配置;但是您没有更改配置,所以没关系。如果您确实需要更改配置,您可以从静态块中进行更改,这样也可以。
编辑:(2013/10)
对于 2.0 及更高版本,可以通过注意到有更好的方法来增强上述内容:使用
ObjectWriter
和ObjectReader
对象,可以通过ObjectMapper
构造它们是完全不可变的,线程安全的,这意味着它甚至在理论上不可能导致线程安全问题(如果代码尝试重新配置实例,则可能会发生ObjectMapper
)。