Java 如何在不使用关机的情况下停止线程池中的线程

Java 如何在不使用关机的情况下停止线程池中的线程,java,Java,我已在应用程序中自动连接ThreadPoolTaskExecutor。我想重用这个池,但现在我有了一个任务列表,我必须调用它,我希望一旦一个任务出现异常,其他任务就会立即终止。 我的ThreadPoolTaskExecutor配置如下: @Bean(name=“reportExecutor”) 公共线程池TaskExecutor reportExecutor(){ ThreadPoolTaskExecutor executor=新的ThreadPoolTaskExecutor(); 执行者。se

我已在应用程序中自动连接ThreadPoolTaskExecutor。我想重用这个池,但现在我有了一个任务列表,我必须调用它,我希望一旦一个任务出现异常,其他任务就会立即终止。 我的ThreadPoolTaskExecutor配置如下:

@Bean(name=“reportExecutor”)
公共线程池TaskExecutor reportExecutor(){
ThreadPoolTaskExecutor executor=新的ThreadPoolTaskExecutor();
执行者。setCorePoolSize(5);
执行器setMaxPoolSize(10);
执行者。设置队列容量(3000);
执行器。设置保持有效时间秒(300);
setRejectedExecutionHandler(新的ThreadPoolExecutor.CallerRunPolicy());
executor.setThreadNamePrefix(“reportExecutor-”);
executor.initialize();
返还执行人;
}
我的测试不能像我期望的那样进行。一旦我调用excutor的shutdown方法,excutor就会被禁用,不再接受任务

@Resource(name=“reportExecutor”)
私有线程池任务执行器;
@GetMapping(“/testExecutors”)
公共无效测试执行器(){
List taskList=new ArrayList();
FutureTask task1=新的FutureTask(()->{
int i=1/0;
返回1;
});
任务列表。添加(任务1);
执行人。执行(任务1);
对于(int i=0;i<10;i++){
FutureTask任务=新的FutureTask(()->{
睡眠(10000);
返回1;
});
任务列表。添加(任务);
执行者。执行(任务);
}
用于(未来任务:任务列表){
试一试{
task.get();
}捕获(例外e){
executor.shutdown();
}
}
}

为什么要调用shutdown?我刚才说过,如果其中一个线程发生异常,那么所有线程的工作都是无用的。所以我想立即停止这些线程。我只找到了shutdown方法,但它不能满足执行器的可重用性。一旦我调用shutdown,它将不再接受任务,并且我不想在系统中续订线程池。调用shutdown不会“终止”其他任务,它将阻止其他任务启动<代码>关闭现在将导致取消正在执行的任务。如果要重用执行器,请不要调用shutdown。您可以查看未来并手动取消它们,您可以使用任务检查的另一个对象查看它们是否应该运行或终止。为什么要调用shutdown?我刚才说过,如果其中一个线程发生异常,所有线程的工作都是无用的。所以我想立即停止这些线程。我只找到了shutdown方法,但它不能满足执行器的可重用性。一旦我调用shutdown,它将不再接受任务,并且我不想在系统中续订线程池。调用shutdown不会“终止”其他任务,它将阻止其他任务启动<代码>关闭现在将导致取消正在执行的任务。如果要重用执行器,请不要调用shutdown。您可以查看未来并手动取消它们,您可以使用任务检查的另一个对象来查看它们是否应该运行或终止。