我有一个在启动时执行多个预定方法的项目。我注意到在执行预定方法后,打开的线程不会关闭,而是保持在“停车”状态。
这是一个正常的行为吗?线程不是应该在方法执行后关闭吗?(因为保持多个线程打开只会降低应用程序的速度并消耗更多的RAM。
下面是我的代码配置:
@EnableScheduling
@Configuration
@ConditionalOnProperty(name = "scheduling.enabled", matchIfMissing = true)
public class SchedulingConfiguration implements SchedulingConfigurer {
}
以下是在服务中调用的方法的示例:
@Scheduled(cron = "0 0 4 * * *")
protected void updateExchangeRates() {
if (enablePostConstruct) {
countryService.updateCountryExchangeRates();
}
}
我想异步运行调度的方法,最大线程池消耗在10-15个线程之间。执行后,线程关闭并重新打开,以防它到达需要再次执行的点。
您能告诉我如何实现这一点吗?我尝试实现SchedulingConfigurer并执行executorService.shutdown(),但没有成功。
1条答案
按热度按时间brccelvz1#
你可以使用一个带有@PreDestroy注解的方法来调用executorService.shutdown()。我不想为Parking State操心,你可能希望这些线程为下一次调用做好准备,所以它们被停放并不是真的有害。代码没有问题。