HTTPS请求和多线程

3

Java的URL类是线程安全的吗,特别是其中的[URL.openConnection()](http://java.sun.com/javase/6/docs/api/java/net/URL.html#openConnection())方法?

在我的应用程序中,我每秒会同时建立数十个到同一URL的HTTPS连接,并且我希望最大化对象的重用。然而,从文档中并不清楚哪些内容可以被重用。

编辑:如果需要,我可以使用其他库。

3个回答

4
我的标准回答关于HTTP和Java的问题是推荐使用Apache HttpClient。它支持HTTP 1.1,因此在与服务器成功建立HTTP请求/响应后,您可以保持这些连接以便重复使用。
它内置了连接池支持,并且文档描述了如何在多线程环境中使用它。

1
+1 选择多线程 HttpClient。这样你就可以避免很多令人头疼的问题。 - Benjamin Cox

3

是的,它是线程安全的。我在许多线程中使用它,没有发现任何问题。

此外,Sun的默认处理程序默认支持keep-alive,因此多个线程可以共享同一个连接。您必须小心阅读所有响应(包括ErrorStream)。否则,下一个请求将从错误状态开始。


0
URL.openConnection会创建一个HttpsURLConnection对象,它是HttpURLConnection的子类。HttpURLConnection文档中规定它可以使用单个底层连接来处理多个请求。我猜想这就是HTTP 1.1中的共享机制。
因此,每次URL.openConnection调用都会得到一个新的HttpsURLConnection对象,但您不会得到许多网络连接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接