我做了下面的示例代码来判断JsonPath版本2.9.0线程是否安全,我意识到它没有. 这是JsonPath的问题,还是有什么方法可以解决?或其他解决方案?请帮
@Test
public void testJsonPath() throws IOException {
String jsonString = "{\"test\":1,\"person\":{\"name\":\"John\",\"age\":50}}";
String jsonString2 ="{\"test\":1,\"person\":{\"name\":\"Babara\",\"age\":48}}";
Thread thread1 = new Thread(createRunnable(jsonString));
Thread thread2 = new Thread(createRunnable(jsonString2));
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private Runnable createRunnable(String json) {
return () -> {
int count = 10;
try {
while (count > 0) {
count--;
Thread.sleep(1000);
String value = JsonPath.read(json, "concat($.person.name, $.person.age)");
if (value.equals("John48") || value.equals("Babara50")) {
System.out.println("Wrong value returned: " + value);
}
System.out.printf("Thread-[%d], Value: [%s]%n", Thread.currentThread().getId(), value);
}
} catch (Exception e) {
e.printStackTrace();
}
};
}
结果显示JsonPath返回错误的值,例如:Babara50, John48
Thread-[30], Value: [John50]
Thread-[31], Value: [Babara48]
Thread-[30], Value: [John50]
Thread-[31], Value: [Babara48]
Thread-[31], Value: [Babara48]
Thread-[30], Value: [John50]
Thread-[31], Value: [Babara48]
Thread-[30], Value: [**Babara50**]
Thread-[31], Value: [**John48**]
Thread-[30], Value: [John50]
Thread-[31], Value: [Babara48]
Thread-[30], Value: [**Babara50**]
Thread-[30], Value: [John50]
Thread-[31], Value: [**John48**]
Thread-[31], Value: [**John48**]
Thread-[30], Value: [John50]
Thread-[31], Value: [Babara48]
Thread-[30], Value: [John50]
Thread-[31], Value: [Babara48]
Thread-[30], Value: [John50]