HttpTimeoutException和TimeoutException之间的区别

4

请问有人能帮忙理解 HttpTimeoutException 和 TimeoutException 之间的区别吗?

根据 HttpTimeoutException 的定义

在指定的时间内未收到响应时抛出。

TimeoutException

当阻塞操作超时时抛出异常。为具有超时指定的阻塞操作需要一种方法来指示已发生超时。对于许多这样的操作,可以返回指示超时的值;当无法或不希望这样做时,则应声明并抛出 TimeoutException。


HttpTimeoutException是通用TimeoutException的子类。您可以使用更通用的TimeoutException处理程序捕获HttpTimeoutException。但是,为了代码清晰度,建议使用更具体的http异常而不是使用TimeoutException处理程序。 - Technohacker
1个回答

4
好的,“异常”是Java中用于标识问题的一种方式。您可以随时使用任何方式来显示问题,但最好使用异常来帮助理解问题。
您问到的这两个“异常”都扩展了“异常”,就像所有“异常”一样。为什么不总是抛出“异常”?因为对于开发人员来说,接收“NumberFormatException”或“NullPointerException”比基本的“异常”更有意义。
那么,让我们来看一下“TimeoutException”和“HttpTimeoutException”。
java.lang.Object
 java.lang.Throwable
  java.lang.Exception
   java.util.concurrent.TimeoutException

java.lang.Object
 java.lang.Throwable
  java.lang.Exception
   java.io.IOException
    java.net.http.HttpTimeoutException

我们可以看到的第一个不同之处是,HttpTimeoutException 扩展了 IOException,而 TimeoutException 扩展了基本的 Exception。这告诉我们什么?
当问题在于 http 客户端或服务器响应时间过长时,我们应该使用 HttpTimeOutException,因为这是 I(nput)O(utput) 问题。
当计算时间过长时,但不是在 http 连接的情况下,应该使用 TimeoutException。个人认为,即使是键盘输入导致 I(nput)O(utput) 时间过长,也不应使用它。我会声明自己的 Exception,它会扩展 IOException 并称之为 IOTimeoutException,以便让未来的读者更清楚地理解。
希望对您有所帮助。如有进一步问题,请随时在评论中提问,我将根据需要更新我的回答。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接