一、先介绍一下Tomcat的后台处理线程,首先是与该线程至关重要的属性:backgroundProcessorDelay。
在每个Container启动的时候会根据backgroupProcessorDelay来决定是否启动ContainerBackgroundProcessor线程。
backgroupProcessorDelay作为ContainerBase的属性,默认为-1,在StandardEngine里面设置成了10,其余的容器如StandardContext、StandardHost都仍然为-1。
所以只有StandardEngine会启动ContainerBackgroundProcessor线程。
ContainerBackgroudProcessor线程每隔backgroundProcessorDelay秒去执行递归指定自己及子容器的backgroundProcessor方法。由于backgroundProcessorDelay大于0的容器会有一个自己的ContainerBackgroudProcessor线程,所以只会执行backgroundProcessorDelay不大于0的子容器的backgroundProcessor方法。
二、利用Tomcat的后台处理线程
作为StandardEngine的子容器,StandardContext重写了父类ContainerBase的backgroundProcessr方法,其中有处理Manager的后台任务。
ManagerBase实现Manager,使用backgroudProcess处理过期的session。