簡體   English   中英

Java:做靜態HTTP請求是一種好習慣嗎?

[英]Java: Is it good practice to do static HTTP Requests?

我剛剛和一位同事討論過,他問我為什么我會像這樣執行靜態Http請求:

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

而不是通過默認構造函數調用該類的對象,而是使用這樣的非靜態方法:

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

如果假設方法doGet的實現僅使用函數的參數而沒有任何成員變量,那么靜態實現是否會在任何方面帶來問題,例如線程安全?

這取決於問題的含義,但是僅給出示例即可,答案是否定的,靜態方法調用沒有問題,而且可以說是更好的方法,因為不需要實例化任何對象。

您提到了線程安全性,因此我將對此進行說明。 如果涉及“可變共享狀態”,則只需要考慮線程安全。 Mutable是這里的關鍵詞。 例如,如果多個線程共享同一個HttpClient實例,並且該HttpClient通過更改其一個或多個成員變量來跟蹤某個狀態,那么這肯定有問題的可能性。

...而且,每個HTTP請求都必須在網絡上發送到其他地方的物理計算機,然后“至少在幾毫秒后”返回。 因此,“多線程” 這一瑣事真的沒有意義。 可以讓單個線程負責向遠程主機發出並行I / O請求,通過一些線程安全隊列從其余代碼接收請求,並以類似的方式在另一個隊列中返回響應(或,隊列)。

將“線程”與“請求”相關聯是浪費的。 很少的工作人員會消耗掉來自該答復隊列的響應。

(當然,有很多現有的Java開源框架可以為您實現所有這些非常熟悉的管道。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM