Java: Это хорошая практика для выполнения статических HTTP-запросов? - PullRequest
0 голосов
/ 22 января 2019

Я только что поговорил с коллегой, который спросил меня, почему я должен сделать статический Http-запрос, подобный этому:

HttpClient.doGet(HashMap<String,String> Parameters);

вместо вызова объекта класса через конструктор по умолчанию и использования нестатического методанапример:

new HttpClient().doGet(HashMap<String,String> Parameters)

Если предположить, что реализация метода doGet использует только параметры функции без каких-либо переменных-членов, статическая реализация будет проблематичной в любом случае, например, безопасность потока?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

... но также каждый HTTP-запрос должен отправляться по сети, на физический компьютер где-то еще, а затем возвращаться, «по крайней мере, через много милли - секунд».Таким образом, нет смысла в "многопоточности" , которая рутинная работа.На один поток может быть возложена ответственность за отправку параллельных запросов ввода-вывода на удаленные хосты, получение запросов от остальной части вашего кода через некоторую потокобезопасную очередь и возврат ответов таким же образом в другой очереди (или, очереди).

Расточительно ассоциировать «поток» с «запросом».Очень маленький пул рабочих может потреблять ответы, которые приходят из этой очереди ответов.

(И, конечно, существует множество существующих сред с открытым исходным кодом Java, которые реализуют всю эту очень знакомую системудля тебя.)

0 голосов
/ 25 января 2019

Это зависит от того, что вы подразумеваете под проблемным, но если исходить только из приведенного вами примера, ответ - нет, вызов статического метода не проблематичен и, возможно, лучше, поскольку не требуется создавать экземпляр объекта.

Вы упомянули о безопасности потоков, поэтому я коснусь этого.С безопасностью потоков нужно считаться только в том случае, если задействовано «изменяемое общее состояние».Мутабельный быть ключевым словом здесь.Например, если несколько потоков совместно использовали один и тот же экземпляр HttpClient, и этот HttpClient отслеживал какое-то состояние, изменяя одну или несколько своих переменных-членов, то это определенно может вызвать проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...