如果一个线程执行失败,我想恢复另一个线程

问题描述 投票:0回答:1

我的示例代码如下:

ExecutorService ex = Executors.newFixedThreadPool(3);

List 作业 = new ArrayList<>();

ex.invokeAll(job);

我有 3 个作业并行运行,其中一个作业失败,它不应该恢复其他作业。我希望它等待所有作业完成(成功或失败),然后更新状态。需要帮助来处理这个用例

尝试使用afterExecute

java multithreading executorservice
1个回答
0
投票

如果提交给执行器服务的作业失败,不会影响其他作业。

所以你只需要等到工作完成即可。最直接的方法就是获取 Futures 结果:

    ExecutorService ex = Executors.newFixedThreadPool(3);
    List<Callable<Void>> job = new ArrayList<>();
    List<Future<Void>> futures = ex.invokeAll(job);

    for (Future<Void> future : futures) {
        try {
            future.get();
            // job succeed
        } catch (ExecutionException e) {
            // job failed
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.