繁体   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