在发出HTTP请求时在java中实现超时的最佳方法

时间:2013-02-13 17:14:25

标签: java multithreading networking

在java.net.Socket上使用setSoTimeout或者使用ExecutorService包含使用另一个类进行Http调用的服务并使用Futures管理方法超时是否更好?

目前更好的定义为良好做法/更可靠/准确。除非相当大,否则不一定考虑对性能的影响。

编辑:应该也提到java.net.Socket上的connect(SocketAddress endpoint,int timeout)方法更清楚。

2 个答案:

答案 0 :(得分:2)

既不?使用HttpURLConnection.setReadTimeout()setConnectTimeout()

答案 1 :(得分:1)

BenG - 我认为这是“它取决于你想要的”场景 - 如果你对并发库进行规范化,那很好,但你需要自己管理关闭套接字。

如果您想使用超时,它会为您完成。

如果您在代码中的任何地方都使用并发库,并且他们觉得非常自然,请务必亲自手动管理套接字。

技术上(如果你看一下Socket里面的代码)对其中一个没有任何大的优势。只需要确保在Future中处理套接字状态时,您正在捕获潜在的IOExceptions,因此处理您的未来不会破坏您的执行线程。