1

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

更好目前被定义为良好实践/更可靠/准确。除非影响很大,否则不一定要考虑对性能的影响。

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

4

2 回答 2

2

两者都不?使用HttpURLConnection.setReadTimeout()setConnectTimeout()

于 2013-02-13T17:34:18.870 回答
1

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

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

如果您在代码中的任何地方都使用并发库并且它们感觉非常自然,当然,您可以自己手动管理套接字。

从技术上讲(如果您查看 Socket 内部的代码),两者并没有什么大的优势。只要确保当您在 Future 中处理套接字状态时,您正在捕捉潜在的 IOExceptions,因此处理您的 Future 不会潜在地炸毁您的执行线程。

于 2013-02-13T19:37:08.017 回答