Другие ответы, похоже, не объясняют, почему close()это действительно необходимо? * 2
Сомневаюсь в ответе "Освобождение ресурса HttpClient".
Он упоминается в старом документе httpcomponents 3.x , который появился давно и сильно отличается от 4.x HC. К тому же объяснение настолько краткое, что не говорит, что это за основной ресурс.
Я провел небольшое исследование исходного кода выпуска 4.5.2, обнаружил, что реализация в CloseableHttpClient:close()основном закрывает только его диспетчер соединений.
(FYI) Вот почему, когда вы используете общий PoolingClientConnectionManagerи вызывающий клиент close(), java.lang.IllegalStateException: Connection pool shut downпроизойдет исключение . Чтобы избежать, setConnectionManagerSharedработает.
Я предпочитаю не делать CloseableHttpClient:close()после каждого запроса
Раньше я создавал новый экземпляр http-клиента при выполнении запроса и, наконец, закрывал его. В этом случае лучше не звонить close(). Поскольку, если диспетчер соединений не имеет флага «общий», он будет отключен, что слишком дорого для одного запроса.
Фактически, я также обнаружил в библиотеке clj-http , оболочку Clojure над Apache HC 4.5, которая вообще не вызывает close(). См. Funcrequest в файле core.clj