引发关键字不能与线程的run方法一起使用

时间:2012-09-06 17:29:12

标签: java

我读到throws关键字不能与thread的run方法一起使用。我想知道它是设计错误还是有正当理由不允许这样做。

5 个答案:

答案 0 :(得分:2)

主要原因是没有人可以捕获异常,除了您可以在Thread或包含ThreadGroup注册的任何全能处理程序。

请注意,您仍然可以抛出RuntimeException,这将最终出现在上述处理程序中。

(顺便说一句,run()的{​​{1}}返回值也可以使用相同的推理。)

答案 1 :(得分:2)

声明

Thread.run()不会抛出已检查的异常,原因与Java控制台应用程序中的static main(String args)没有抛出已检查的异常的原因相同 - 您无法编写会捕获的代码它。 (这两种方法通常由Java运行时环境调用,而不是由您的代码调用。)请注意,任何一种方法仍然可以抛出未经检查的异常(RuntimeExceptionError及其子类)。 Java运行时环境将处理这些(通常以非常优雅的方式)。

答案 2 :(得分:1)

Runnable's run()方法无法返回,也无法抛出任何Checked Exception ...很可能Java设计师认为不值得抛出异常在一个单独的线程上,这主要是一个单独的过程...

但后来来自 Java 1.5 Callable<T> inteface带有call()方法,可以返回并抛出已检查的异常...

答案 3 :(得分:1)

问题是调用上下文无法获取返回值或异常,因为它现在在新上下文中运行(这是新线程的全部含义)。但是你可以使用Thread.setDefaultUncaughtExceptionHandler()

答案 4 :(得分:0)

运行本身不会抛出异常。调用.start()(调用run()函数)时所做的就是告诉程序继续使用新线程沿着路径前进。函数调用和run()函数内的所有内容都可以抛出异常。 run()本身没有可能的运行时错误。如果存在运行时错误,那是因为您的进程资源管理器,处理程序或某些操作系统级别问题已经发生,然后程序无法处理它。