Java的URL
类是否是线程安全的,特别是[URL.openConnection()
](http://java.sun.com/javase/6/docs/api/java/net/URL.html#openConnection())?
在我的应用程序中,我在同一个URL上创建了数十个并发HTTPS连接,我希望最大化对象重用。然而,从文档中可以重用的不清楚。
编辑:如果需要,我愿意使用不同的库。
答案 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对象,但您将无法获得大量网络连接。