gpt4 book ai didi

java - 线程中的异常

转载 作者:行者123 更新时间:2023-12-02 07:39:18 28 4
gpt4 key购买 nike

我做了一个多线程程序。其中,主线程启动了 10 个线程,但问题是每当其中一个线程发生异常时,整个应用程序就会停止。

  1. 但我希望每当一个线程中发生异常时,只有该线程应该停止,而其他线程继续工作。我怎样才能做到这一点?

  2. 其次,我希望主线程仅在所有 10 个线程完成后才停止。我怎样才能做到这一点?

最佳答案

您可以使用 ExecutorService (包含多个线程)通过调用submit() 来处理您的各个工作项。提交方法返回一个 Future,它将封装处理结果或抛出的任何异常。换句话说,您的 ExecutorService 中的线程如果发生异常,不会终止。

示例

首先创建一个包含多个线程的执行器服务:

ExecutorService execService = Executors.newFixedThreadPool(5);

将我们希望提交的工作项目定义为 Callable :

public class MyWorkItem implements Callable<Integer> {
public Integer call() throws Exception {
int result = new Random().nextInt(5);

// Randomly fail.
if (result == 0) {
throw new IllegalArgumentException("Fail!");
}

return result;
}
}

提交一些工作给执行器服务去做,并存储Future<Integer>对于每个 Callable<Integer> .

List<Future<Integer>> futures = new LinkedList<Future<Integer>>();

for (int i=0; i<10; ++i) {
futures.add(execService.submit(new MyWorkItem()));
}

现在迭代 future,尝试检索每个工作项的结果(我们可以为此使用 CompletionService)。

for (Future<Integer> future : futures) {
try {
Integer result = future.get();
} catch(Exception ex) {
// Handle exception.
}
}

关于java - 线程中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1596037/

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