HTTPS请求和多线程

时间:2009-11-12 23:38:57

标签: java url connection connection-pooling

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

在我的应用程序中,我在同一个URL上创建了数十个并发HTTPS连接,我希望最大化对象重用。然而,从文档中可以重用的不清楚。

编辑:如果需要,我愿意使用不同的库。

3 个答案:

答案 0 :(得分:3)

我对HTTP和java的标准回答是推荐Apache HttpClient。它支持HTTP 1.1,因此您可以在服务器成功获得HTTP请求/响应后保持这些连接打开以便重用。

它内置了对连接池的支持,以及文档describes如何在多线程上下文中使用它。

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

URL.openConnection将创建一个HttpsURLConnection对象,它是HttpURLConnection的子类。 docs for HttpURLConnection表示它可以使用与服务器的单个底层连接来满足多个请求。我假设这是共享HTTP 1.1。

因此,您将在每个URL.openConnection调用中获得一个新的HttpsURLConnection对象,但您将无法获得大量网络连接。