Java 主线程监听线程池任务异常的最佳实践
"Java 主线程监听线程池任务异常的最佳实践"\n要在主线程中监听线程池任务的异常,可以使用ExecutorService的submit方法提交任务,并且将返回的Future对象保存起来。然后在主线程中通过调用Future对象的get方法来获取任务执行的结果,如果任务抛出了异常,get方法会将异常重新抛出,然后你可以在主线程中捕获并处理这个异常。\n\n以下是一个示例代码:\n\njava\nimport java.util.concurrent.*;\n\npublic class Main {\n public static void main(String[] args) {\n // 创建线程池\n ExecutorService executorService = Executors.newFixedThreadPool(5);\n\n // 提交任务并保存Future对象\n Future<?> future = executorService.submit(() -> {\n // 执行任务,可能会抛出异常\n throw new RuntimeException("任务异常");\n });\n\n try {\n // 获取任务执行结果,如果任务抛出了异常,get方法会将异常重新抛出\n future.get();\n } catch (InterruptedException e) {\n e.printStackTrace();\n } catch (ExecutionException e) {\n // 捕获并处理任务抛出的异常\n System.out.println("任务执行异常:" + e.getCause().getMessage());\n }\n\n // 关闭线程池\n executorService.shutdown();\n }\n}\n\n\n在这个示例中,我们使用ExecutorService的submit方法提交了一个任务,这个任务会抛出一个运行时异常。然后我们通过调用Future对象的get方法来获取任务执行的结果。如果任务抛出了异常,get方法会将异常重新抛出,然后我们在主线程中通过捕获并处理这个异常。\n\n注意,调用get方法会阻塞主线程,直到任务执行完成并返回结果或者抛出异常。如果不想阻塞主线程,可以使用isDone方法来判断任务是否完成,或者使用get(timeout, unit)方法设置超时时间。
原文地址: https://www.cveoy.top/t/topic/qepK 著作权归作者所有。请勿转载和采集!