gpt4 book ai didi

java - Java Apache HttClient : ThreadSafe or not?

转载 作者:行者123 更新时间:2023-12-03 13:15:32 26 4
gpt4 key购买 nike

我必须创建一个Web服务,该服务通过http请求(方法get)来询问黑匣子。

我想使用Apache http客户端,但是在4.3.1版本中,我对过时的对象和方法有一些警告。

所有示例说明使用ThreadSafe的DefaultHttpClient。
现在我们必须使用不是ThreadSafe的HttClientBuilder。

这到底有什么影响?
愚蠢的问题:如果我在Spring MVC Controller (Singleton线程安全)中使用它,会有什么后果?
线程安全中使用的非线程安全过程是否变为线程安全(lol)?

最佳答案

我不确切知道您想做什么,但是并发是关于线程之间共享状态的全部。如果两个线程并行访问同一状态,则可能/将遇到问题。

请注意,不共享局部变量,因此,如果多个线程并行调用同一方法,则它们都具有自己的局部变量:

public int safeAdd(int a, int b) {
int sum = a + b;
return sum;
}

本地变量 absum不处于共享状态!每个线程都有自己的“副本”!因此对象是无状态的!

Stateless objects are always thread-safe!



当然,如果发布局部变量,情况会发生变化:
int sum;

public int unsafeAdd(int a, int b) {
sum = a + b;
return sum;
}

在这里, sum不再是局部变量。它仅存在一次(每个实例)。如果有多个线程调用 unsafeAdd,则可能会/将会发生不好的/意外的事情!

这意味着,如果您仅在自己的方法中使用 HttpClientBuilder-没问题。但是,如果发布它(如上例所示),则必须注意并行访问。

(另请参见“实践中的Java并发性”一书: http://jcip.net/)

关于java - Java Apache HttClient : ThreadSafe or not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20325975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com