gpt4 book ai didi

Java:记录 FutureTask 异常

转载 作者:行者123 更新时间:2023-11-29 09:14:18 27 4
gpt4 key购买 nike

我有一个应用程序,它定期提交要在专用线程中执行的任务。这些任务是 FutureTask<V>并且线程只不过是一个无限循环,它在作业进入队列时执行作业,如果为空则进入 hibernate 状态。

有时我需要等待计算结果,所以我调用 FutureTask 的 get() 方法,如果发生错误,该方法也会抛出异常。但在某些情况下,我不关心结果是什么(如果有的话),但我需要知道(日志、printStackTrace() 或其他...)任务执行期间是否出现某种故障。

有什么方法可以实现这一点而不必等待我不需要的 get() 吗?

提前致谢!

更新:如果没有其他人等待结果,则在执行任务后在运行线程上调用 get() 似乎是捕获异常的唯一方法。

另一种解决方案是扩展 FutureTask 类以提供一种方法,该方法通过 java 反射公开 sync.exception 私有(private)字段。

最佳答案

如果我正确理解您的问题,那么有一个简单的解决方案。修改您的专用任务运行线程以在运行每个任务后调用 Future.get(),捕获并记录 ExecutionException(如果有)。

请注意,在运行任务后在任务运行线程中调用get 保证不会阻塞。

(未捕获的异常处理程序将无济于事,因为 future 包装的 Runnable 的 run() 方法抛出的任何异常和错误都将被 FutureTask.run( )`.)

关于Java:记录 FutureTask 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10471264/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com