代码之家  ›  专栏  ›  技术社区  ›  Cratylus

httpurlconnection线程安全

  •  4
  • Cratylus  · 技术社区  · 15 年前

    HttpUrlConnection线程安全吗?例如,如果我有一个连接到服务器的HttpConnection实例,并且这个实例被不同的线程使用(例如,尝试同时发送POST),HttpUrlConnection将如何处理这种情况?a) 他们会串行地发送POST,还是b)第一个线程发送POST,得到响应,然后第二个线程发送POST?如果他们串行发送post,这意味着多个活动post到同一个tcp连接。这允许吗?服务器能处理吗?

    2 回复  |  直到 15 年前
        1
  •  5
  •   Romain Hippeau    15 年前

    它没有说它是否在文件中。看了代码之后( http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Modules-sun/net/sun/net/www/protocol/http/HttpURLConnection.java.htm )看起来getInputStream和getOutputStream是同步的。我确实担心的是,如果有一个线程获取一个输入流,而同时有另一个线程获取一个输出流,那么您的信号可能会被交叉。inputStream和outputStream是可能不应该在线程间共享的实例变量。

    如果我是你,我将实现一个队列,允许你将消息发布到队列中,然后一次发布一条消息到服务器。当请求返回时,您只需调用回调。这将确保在响应返回之前不发送请求。

        2
  •  13
  •   irreputable    15 年前

    它不是线程安全的。

    这个 精神

    由于交换的请求-响应可以在大多数网络协议之上实现,因此最初HTTP允许指定底层协议的可能性。我们可以想象通过电子邮件进行http请求/响应交换- http:/smtp/www.example.com ; 也许是RMI- http:/rmi/www.example.com http:// 真的意思是 http:/tcp/

    今天,只使用TCP,我们只剩下这个奇怪的双斜杠分隔符。但它提醒我们,HTTP对TCP的依赖是相当偶然的。