在java.net.Socket上使用setSoTimeout或者使用ExecutorService包含使用另一个类进行Http调用的服务并使用Futures管理方法超时是否更好?
目前更好的定义为良好做法/更可靠/准确。除非相当大,否则不一定考虑对性能的影响。
编辑:应该也提到java.net.Socket上的connect(SocketAddress endpoint,int timeout)方法更清楚。
答案 0 :(得分:2)
既不?使用HttpURLConnection.setReadTimeout()
和setConnectTimeout()
。
答案 1 :(得分:1)
BenG - 我认为这是“它取决于你想要的”场景 - 如果你对并发库进行规范化,那很好,但你需要自己管理关闭套接字。
如果您想使用超时,它会为您完成。
如果您在代码中的任何地方都使用并发库,并且他们觉得非常自然,请务必亲自手动管理套接字。
技术上(如果你看一下Socket里面的代码)对其中一个没有任何大的优势。只需要确保在Future中处理套接字状态时,您正在捕获潜在的IOExceptions,因此处理您的未来不会破坏您的执行线程。