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

如何从执行程序中正确捕获RuntimeException?

谢烨烨
2023-03-14
问题内容

说我有以下代码:

ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(myRunnable);

现在,如果myRunnable抛出RuntimeExcpetion,我该如何捕捉?一种方法是提供自己的ThreadFactory实现,newSingleThreadExecutor()uncaughtExceptionHandler为其中Thread的设置custom
。另一种方法是将其包装myRunnableRunnable包含try-catch -block
的本地(匿名)。也许还有其他类似的解决方法。但是…以某种方式感觉很脏,我觉得这不应该那么复杂。有没有干净的解决方案?


问题答案:

干净的解决方法是使用ExecutorService.submit()而不是execute()。这将返回一个Future,您可以用来检索结果或任务异常:

ExecutorService executor = Executors.newSingleThreadExecutor();
Runnable task = new Runnable() {
  public void run() {
    throw new RuntimeException("foo");
  }
};

Future<?> future = executor.submit(task);
try {
  future.get();
} catch (ExecutionException e) {
  Exception rootException = e.getCause();
}


 类似资料:
  • 问题内容: 我正在使用来自Guava的ListenableFuture,关于它们的一件好事是,将Executor传递给该方法,即要求在给定的线程/执行器上执行回调。 在我的Android应用程序中,我希望能够基于UI线程启动异步执行,并计划一个也在UI线程上执行的回调。因此,我想以某种方式将UI线程执行器提交给上述方法。如何实现呢? 或者,换句话说,我想要UI线程的执行程序。它已经在Android

  • 如何正确执行collect以获取作为键并将Ethernet对象作为每个流元素的值?

  • 野姑娘。如果我编写了这个包装器,我可以按照上面描述的方式调用包装器: XML::XPath。可以使用此包装: XML::XPath中的返回太多噪声、和。 返回与类似的噪声。 返回。 返回所需的内容,但仅针对第一个匹配项。 对于几乎满足这个问题的另一个解决方案,这里有一个XSLT,可以用来计算任意XPath表达式(需要XSLT处理器中的dyn:evaluate支持): 使用。

  • 问题内容: 想知道是否有人知道一种在运行时从C#代码执行Java命令行程序的好方法吗? 它与执行本机.EXE文件相同吗? 它会同步还是异步运行(这意味着我可能必须等待线程完成才能找到结果) 具体来说,我想从服务器端的Web应用程序中调用一个小工具(恰好用Java编写),以对文本文件进行一些处理。我想等待它完成,因为在Java程序完成对文本文件的处理之后,我想获取处理后的文本,并在C#应用程序中使用

  • 我正在编写一个简单的代码,用javaFX显示表的内容。我希望程序在每次显示新内容时暂停。 问题是,无法按计划工作。事实上,程序甚至在显示内容之前都会暂停。 我如何纠正这个问题?

  • 问题内容: 我应该如何从我的程序中运行另一个程序?我需要能够将数据写入启动的程序中(并可能从中读取) 我不确定这是否是标准的C函数。我需要应该在Linux下工作的解决方案。 问题答案: 您要使用。它为您提供了一个单向管道,您可以使用该管道访问程序的stdin和stdout。 popen是现代unix和类似unix的操作系统的标准配置,其中Linux是其中之一:-) 类型 在终端上阅读有关它的更多信