import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import java.io.IOException;
import java.util.Map;
public class JsonParser {
private ObjectMapper OBJECT_MAPPER = new ObjectMapper();
private ObjectReader OBJECT_READER = new ObjectMapper().readerFor(Map.class);
public Map<String, String> parseJson1(String json) throws IOException {
ObjectReader objectReader = OBJECT_MAPPER.readerFor(Map.class);
return objectReader.readValue(json);
}
public Map<String, String> parseJson2(String json) throws IOException {
return OBJECT_READER.readValue(json);
}
}
我写了两个样本
parseJson1()
- 在每次解析时从ObjectMapper创建ObjectReader parseJson2()
- 在ObjectReader上重用单个实例其中哪一个是对的?
答案 0 :(得分:5)
文档说它“完全是线程安全的”,这意味着你可以安全地使用parseJson2
,而不必担心在并发线程中调用这个方法。
使用“流畅的”(或者,类型,构建器)模式,以便实例是不可变的(因此完全线程安全,没有外部同步);为不同的配置构建新实例。实例最初由ObjectMapper构造,可以重用,共享,缓存;这既是因为线程安全,也是因为实例相对较轻。