Java:做静态HTTP请求是一种好习惯吗?

时间:2019-01-22 16:03:02

标签: java multithreading static thread-safety

我刚刚与一位同事讨论过,问我为什么我要执行这样的静态Http请求:

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

而不是通过默认构造函数调用类的对象,而是使用这样的非静态方法:

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

如果假设方法doGet的实现仅使用函数的参数而没有任何成员变量,则静态实现在任何方面都会产生问题,例如线程安全?

2 个答案:

答案 0 :(得分:0)

这取决于您有问题的意思,但是仅给出示例,答案是否定的,静态方法调用没有问题,并且可以说更好,因为不需要实例化对象。

您提到了线程安全性,因此我将对此进行说明。如果涉及“可变共享状态”,则只需要考虑线程安全。 Mutable是这里的关键词。例如,如果多个线程共享同一个HttpClient实例,并且该HttpClient通过更改一个或多个成员变量来跟踪某个状态,那么肯定有问题的可能性。

答案 1 :(得分:0)

...但是,每个HTTP请求都必须通过网络发送到其他地方的物理计算机,然后返回,“至少在几秒钟后返回 milli-”。因此,“多线程” 确实没有意义。可以让单个线程负责向远程主机发出并行I / O请求,通过一些线程安全队列从其余代码接收请求,并以类似的方式在另一个队列中返回响应(或,排队)。

将“线程”与“请求”相关联是浪费的。一小部分工作人员会消耗掉来自该回复队列的响应。

(当然,有许多现有的Java开源框架可以为您实现所有这些非常熟悉的管道。)