杰克逊拥有ObjectReader,文档说明您需要使用它来确保线程安全。但我不明白如何正确地做
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我写了两个样本
parseJson1() -在每次解析时从ObjectMapper创建ObjectReaderparseJson2() -在ObjectReader上重用单个实例他们中哪一个是对的?
文档说这是“完全线程安全的”,这意味着您可以parseJson2安全使用,而不必担心在并发线程中调用此方法。
使用“流利的”(或某种类型的构建器)模式,以便实例是不可变的(因此完全线程安全,无需外部同步);为不同的配置构建了新实例。实例最初由ObjectMapper构造,并且可以重用,共享,缓存;既是由于线程安全,又因为实例相对较轻。
| 归档时间: |
|
| 查看次数: |
8553 次 |
| 最近记录: |