线程池中线程的运行时异常完全消失:如何处理



朋友在下面看到此简单代码。请注意,我正在使用线程池,因此我无法直接从代码中访问线程。
在此代码中,应该有一个NPE,但它完全消失了,并且代码默默退出。我明白的是,主线程中没有异常堆栈,但是世界上如何显示运行时例外的情况?我对在代码上进行尝试不感兴趣 - 捕获(异常E),因为我无法确定可以在哪里发生NPE或运行时异常。在杀死JVM之前,必须显示运行时异常。但是如何?我什至尝试 - 围绕主线程捕获(例外),但无济于事。

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class Test {
    ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(4);
    public static void main(String[] args) {
        new Test().execute();
    }
    void execute(){
        System.out.println("start");
        List<Callable<String>>li = new ArrayList<>();
        li.add(() -> {
            String s = null;
            s.toLowerCase();
            return "Hello";
        });
        try {
            List<Future<String>> cs = executor.invokeAll(li);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("end");
        executor.shutdown();
    }
}

看线程。
当没有例外

时,这将为您的处理程序打电话给您的处理程序

最新更新