若有变化,就重新加载类,在这个过程中不会清空Session ,一般用在开发环境。
类似地,也由后台线程定时检测Web应用变化,但它会重新加载整个Web应用。这会清空Session,比热加载更干净、彻底,一般用在生产环境。
==============================================================================
Tomcat通过开启后台线程,使得各个层次的容器组件都有机会完成一些周期性任务。
实际开发往往也需要执行一些周期性任务,比如监控程序周期性拉取系统健康状态。
开启后台线程做周期性任务,最常见的就是线程池的ScheduledThreadPoolExecutor,没错,Tomcat就是通过它来开启后台线程:
backgroundProcessorFuture = Container.getService(this).getServer().getUtilityExecutor()
.scheduleWithFixedDelay(
// 要周期性执行的Runnable
new ContainerBackgroundProcessor(),
//第一次执行延迟多久
backgroundProcessorDelay,
// 之后每次执行间隔多久
backgroundProcessorDelay,
// 时间单位
TimeUnit.SECONDS);
任务类ContainerBackgroundProcessor是ContainerBase的内部类,ContainerBase是所有容器组件的基类。
protected class ContainerBackgroundProcessor implements Runnable {
@Override
public void run() {
// 入参"宿主类"实例
processChildren(ContainerBase.this);
}
protected void processChildren(Container container) { <