Поможет ли создание новых объектов предотвратить проблемы параллелизма внутри статического метода? - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть этот метод, который принимает 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 голосов
/ 27 ноября 2018

Как уже упоминалось в комментариях,

tl; dr : Первый код, который я предоставил, всегда был безопасным для потоков.

Каждый поток, который вызываетМетод getResponseBody предоставит потоку локальный экземпляр Response.Здесь нет общего статического ресурса, нуждающегося в синхронизации.Это выглядит поточно-ориентированным.

Локальные переменные не используются совместно для потоков для нестатических и статических методов.То, на что они ссылаются, может быть.

Второй метод делает то же самое, что и первый метод, но с именованными переменными для некоторых значений.Это не меняет его поведение.

...