gpt4 book ai didi

java - 从 Java ExecutorService 捕获线程异常

转载 作者:太空狗 更新时间:2023-10-29 23:02:21 24 4
gpt4 key购买 nike

我正在研究并行计算的软件开发框架 JavaSeis.org .我需要一个强大的机制来报告线程异常。在开发过程中,了解异常的来源具有很高的值(value),所以我宁愿在过度报告方面犯错误。我也希望能够在线程中处理 Junit4 测试。下面的方法合理还是有更好的方法?

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class TestThreadFailure {

public static void main(String[] args) {
int size = 1;
ExecutorService exec = Executors.newFixedThreadPool(size);
ThreadFailTask worker = new ThreadFailTask();
Future<Integer> result = exec.submit(worker);
try {
Integer value = result.get();
System.out.println("Result: " + value);
} catch (Throwable t) {
System.out.println("Caught failure: " + t.toString());
exec.shutdownNow();
System.out.println("Stack Trace:");
t.printStackTrace();
return;
}
throw new RuntimeException("Did not catch failure !!");
}

public static class ThreadFailTask implements Callable<Integer> {
@Override
public Integer call() {
int nbuf = 65536;
double[][] buf = new double[nbuf][nbuf];
return new Integer((int) buf[0][0]);
}
}
}

最佳答案

考虑调用 execute()而不是 submit()ExecutorService 上. Thread使用 execute() 调用将调用 Thread.UncaughtExceptionHandler当它失败时。

简单地制作一个ThreadFactory在所有 Threads 上安装 Thread.UncaughtExceptionHandler,然后在 ExecutorService 上使用 execute() 调用您的工作提交()

看看这个related stack overflow question .

关于java - 从 Java ExecutorService 捕获线程异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4492273/

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