前言 分析前几天遇到的一个老代码留下的坑。线程池中运行Callable线程时抛出的异常捕获不到,简化的逻辑如图,环境是jdk8: 运行结果: 解决方案 线程池返回Future<>,调用其get() 在Callable中 try-catch可能抛错的异常 运行结果: 源码分析 不难发现线程池提交时创建的类为FutureTask。 public <T> Future<T> submit(Callable<T> task) { if (task == null) throw new NullPointerException(); RunnableFuture<T> ftask = new