我有 ThreadPoolTaskExecutor。我应该发送太多电子邮件(不同的电子邮件)。如果在电子邮件发送过程中出现错误,我应该将其写入数据库。
<bean id="taskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="5" />
<property name="maxPoolSize" value="10" />
<property name="WaitForTasksToCompleteOnShutdown" value="true" />
</bean>
我正在执行任务。taskExecutor.execute(可运行)。一切正常!
@Override
public void run() {
try {
mailService.sendMail();
} catch (Throwable t) {
daoService.writeFaillStatus();
}
}
一切似乎都很好!异步请求做得很好!
我也有
white(true) {
if(executor.getActiveCount()==0){
executor.shutdown(); break;
}
Thread.sleep(3000)
}
因为 WaitForTasksToCompleteOnShutdown=true 任务永远不会被自动关闭。换句话说,主线程永远不会被破坏(主线程是我调用线程执行器任务的线程 - 当我在 eclipse 中运行代码时,终端始终处于活动状态)。即使在执行程序线程完成他们的工作之后,我的控制台也看起来像这样:
我认为这是因为,主线程正在等待某些东西——有人说“一切都已经完成,放松,去关闭”
所以想到了这个解决方案while(true)。你能告诉我这是否是个好主意吗?可能是不好。
我知道这个执行器也有 submit() 方法。我想我不需要这里。如果我在这篇文章中不正确,请纠正我。