java - httpurl连接线程安全

标签 java .net multithreading httpurlconnection

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

谢谢

最佳答案

它不是线程安全的。

你不应该缓存/共享一个连接。只需为每个请求创建一个新连接。创建新连接肯定会有一点开销,但它非常小,您不必担心。

HTTP 的精神实际上是无连接的。从语义上讲,客户端和服务器之间没有连接。客户端发送请求,服务器返回响应,仅此而已。

虽然今天 HTTP 确实是在 TCP 之上定义的,它是一种连接协议(protocol),并且 HTTP 可能使用长期存在的 TCP 连接来处理多个请求/响应,但这不是 HTTP 的本质。

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

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

关于java - httpurl连接线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3272681/

相关文章:

java - 如何将枚举与父类(super class)型分组

.net - Microsoft.Speech 通用语言语法

Python 脚本使用 while 循环来不断更新作业脚本并多处理队列中的任务

java - 如何在 testNG 类中使用 completableFuture

java - 图节点优先级的设计模式

java - WebServiceTemplate - 拦截器和回调之间的区别?

java - CouchbaseClient VS CouchbaseCluster

c# - 无法将类型 'int' 隐式转换为 'short'?

c# - 计算文本文件中的单词数

java - Java 计划执行程序的未处理异常