1.多线程任务一般就只有两种excute和sumbit, 最大的区别就是execute没有返回值,submit有返回值。
异常捕获方法如下
TassThreadPoolExecutor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(4,// 核心线程数量20,// 最大线程数30,// 空闲线程最大存活时间TimeUnit.SECONDS,// 时间单位 秒new ArrayBlockingQueue<>(30),Executors.privilegedThreadFactory(),// 创建线程工厂new ThreadPoolExecutor.AbortPolicy()// 任务的拒绝策略) {//重写afterExecute方法@Overrideprotected void afterExecute(Runnable r, Throwable t) {super.afterExecute(r, t);//excute提交if (t != null) {log.error("afterExecute执行异常" + t);}//如果r的实际类型是FutureTask 那么是submit提交的,所以可以在里面get到异常if (r instanceof FutureTask) {try {Future<?> future = (Future<?>) r;future.get();} catch (Exception e) {log.error("future执行异常", e);}}}};