Java 中的 HTTP 帖子和多线程

Posted

技术标签:

【中文标题】Java 中的 HTTP 帖子和多线程【英文标题】:HTTP posts and multiple threads in Java 【发布时间】:2010-09-16 08:37:07 【问题描述】:

我正在编写一个内部 Java Applet 来通过 HTTP 上传文件。我开始使用内置的 ClientHttpRequest,如果我想一个接一个地发布,它会非常有用。当我尝试同时发布多个线程时,服务器端的某些东西会出现问题,并且对于大文件,连接会挂起,同时仍会上传较小的文件。 (大的似乎在 10 兆左右)经过大量查找,我无法找到可以设置为从该错误中恢复的超时,但最终从 Apache 中找到了 ClientHttp,它确实提供了设置超时的机制。它的问题在于,虽然它声称能够在多线程程序中工作,但实际上它只执行一个又一个请求。我发现了很多 HttpClient 的示例代码,它们说它将适用于多个线程,并且已经对我的代码进行了调整以合并这些更改,但是它们都没有任何区别,而且我仍然坚持使用基本上 1 个线程。

虽然发布时确实不需要多个线程(HttpClient 确实似乎比 ClientHttpRequest 快一点),但获得额外的速度提升真的很不错,因为有很多较小的文件可以在同一时间。

文件正在通过 HTTP 发送,因为我们希望使用已登录用户的会话 cookie 使用相同的身份验证。

所以我正在寻找一种方法来使用 ClientHttpRequest 设置超时或 HttpClient 的代码,它实际上会按照承诺同时发送多个请求。

我在线程之间共享相同的 HttpClient 实例并使用多线程连接管理器(没有它甚至无法工作)就像文档说的那样,它没有帮助。

我们将不胜感激,如果您需要任何说明,请告诉我。

【问题讨论】:

在什么包里可以找到这个ClientHttpRequest。一开始我以为是Apache的HttpClient,后来又查了J2SE标准库。 【参考方案1】:

查看您的代码示例可能会有所帮助。

也许问题出在小程序环境上。您是在 appletviewer、IDE 还是在浏览器中测试它?浏览器通常设置为将与同一 Web 服务器的连接数限制为 2。您可以尝试添加一个 main() 并独立运行它以查看是否可以解决问题。

【讨论】:

以上是关于Java 中的 HTTP 帖子和多线程的主要内容,如果未能解决你的问题,请参考以下文章

21Java并发性和多线程-Java中的锁

22Java并发性和多线程-Java中的读/写锁

14Java并发性和多线程-Java ThreadLocal

Java线程和多线程——死锁

5Java并发性和多线程-相同线程

Java中的命名管道和多线程