如何在@Scheduled execution(Spring Boot )后关闭线程

wgeznvg7  于 2023-02-08  发布在  Spring
关注(0)|答案(1)|浏览(241)

我有一个在启动时执行多个预定方法的项目。我注意到在执行预定方法后,打开的线程不会关闭,而是保持在“停车”状态。

这是一个正常的行为吗?线程不是应该在方法执行后关闭吗?(因为保持多个线程打开只会降低应用程序的速度并消耗更多的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(),但没有成功。

brccelvz

brccelvz1#

你可以使用一个带有@PreDestroy注解的方法来调用executorService.shutdown()。我不想为Parking State操心,你可能希望这些线程为下一次调用做好准备,所以它们被停放并不是真的有害。代码没有问题。

相关问题