当前位置: 首页 > 面试题库 >

Java线程:Run方法无法引发检查的异常

谷光誉
2023-03-14
问题内容

在Java线程中,“运行”方法不能引发“检查的异常”。我在Core Java(第1卷)书中遇到了这个问题。有人可以解释其背后的原因吗?


问题答案:

有人可以解释其背后的原因吗?

是的,因为您抛出的任何异常run都会被JVM仔细忽略。因此,将其抛出可能是一个错误(除非您对该线程具有特定的异常处理程序,请参阅有关该文档的文档)。没有理由煽动潜在的错误行为。

或者举个例子。

 class MyThread extends Thread {
     public void run() {
         throw new RuntimeException();
     }
 }

...

new MyThread().start();
// here thread dies silently with no visible effects at all

编辑

为什么父线程不能从生成的“子”线程“捕获”异常?

@ chaotic3quilibrium 已经在他的评论中指出了为什么不这样做:因为父线程可能已经继续运行。

new MyThread().start(); // launch thread and forget

// 1000 lines of code further...
i = i + 1; // would you like exception from child thread to be propagated here?


 类似资料:
  • 问题内容: 这是我的代码块。 这段代码无法编译,因为我在Line1中添加了“ throws”。 编译器抱怨重写的方法不能引发异常。 为什么这样 ?。 为什么覆盖的方法不能引发异常? 因为我可以通过在子类的实现中添加n行代码来覆盖基类中的方法。 这些添加的代码会引发异常,所以为什么我不能在重写的方法中使用“引发”? 问题答案: 重写的方法可以引发Exception,只要被重写的方法也抛出相同的Exc

  • 问题内容: 我在ServerConnectionManager中有以下代码: 我在其他一些使用ServerConnectionManager的线程的run方法中有一些代码:让我们将此线程称为B 问题是我无法从ServerConnectionManager的run方法中调用ReceivedPacket上的任何方法。但是,我能够从此ServerConnectionManager线程的构造函数中调用re

  • 我无法在Spring中捕获异步方法抛出的异常。我已经编写了一个未捕获的异常处理程序来捕获,但没有成功。该应用程序将启用启动任意数量的永远运行的异步作业。我认为我的异步方法需要返回Future,以便我可以将其存储在hashmap中并检查其状态或停止作业。我也可以通过存储它来获取所有正在运行的作业。我认为我不能使用get method of Future,因为如果输入正确,它会阻塞,我的作业将永远运行

  • 本文向大家介绍Java线程的start方法回调run方法的操作技巧,包括了Java线程的start方法回调run方法的操作技巧的使用技巧和注意事项,需要的朋友参考一下 面试中可能会被问到为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法? Java 创建线程的方法 实际上,创建线程最重要的是提供线程函数(回调函数),该函数作为新创建线程的入口函数,实现自己

  • 我在实现Runnable的类的run()中调用的方法被设计为引发异常。 但是Java编译器不允许我这样做,建议我用try/catch来围绕它。 问题是,通过使用try/catch将其包围,我使特定的run()变得无用。我确实想抛出该异常。 如果我为run()本身指定了throws,编译器会抱怨异常与Runnable中的throws子句不兼容。run()。 通常情况下,我完全可以不让run()抛出异

  • 我有任务要做,我有点卡住了。我要做4个服务(A,B,C,D)。每个服务都应该有自己的线程。它们应该按顺序开始并运行。如果服务A启动,则可以启动服务B,如果服务B启动,如果服务C启动,则可以启动服务D。我设法创建了服务及其线程,但我不知道如何在PriorityService类中的start()和priority()方法之间创建通信。我想检查服务(线程)A是否活着,如果是,我想从列表移到第二个服务,等