朋友们在下面看到这个简单的代码。请注意,我使用的是线程池,因此我无法直接访问代码中的线程。
在这段代码中,应该有一个NPE,但它会完全消失,代码会以静默方式退出。我理解也许异常堆栈在主线程中不可用,但是世界上如何显示运行时异常的出现?我不想在整个代码中放置try-catch(Exception e),因为我无法确定NPE或运行时异常可能发生的位置。必须在杀死JVM之前显示运行时异常。但是怎么样?我甚至在主线程周围进行了try-catch(Exception),但无济于事。
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();
}
}