创建新对象是否有助于防止静态方法内的并发问题?

时间:2018-11-27 00:00:17

标签: java concurrency static

我有这种方法可以接受OkHttp#response

public static Map<String, Object> getResponseBody(Response response) throws IOException {
    return new ObjectMapper()
            .readValue(response.body().string(),
                    new TypeReference<Map<String, Object>>() {
                    });
}

据我了解,如果多个类使用getResponseBody,我将遇到大问题,因为它们都将访问相同的Response

如果我这样做会解决吗?:

public static Map<String, Object> getResponseBody(Response response) throws IOException {
    ResponseBody responseBody = response.body();
    String responseString = responseBody.string();
    ObjectMapper mapper = new ObjectMapper();
    Map<String, Object> map = mapper
            .readValue(responseString,
                    new TypeReference<Map<String, Object>>() {
                    });
    return map;
}

1 个答案:

答案 0 :(得分:1)

如评论中所述,

tl; dr :我提供的第一个代码一直都是线程安全的。

  

每个调用getResponseBody方法的线程都将提供一个   线程本地Response实例。没有共享的静态资源   这里需要同步。它看起来是线程安全的。

     

非静态线程和非线程线程之间不共享局部变量   静态方法。他们所引用的可能是这样。

     

第二种方法与第一种方法具有相同的功能,但是   为某些值命名变量。它不会改变它的   行为。