/**
* <p>Starts the evictor with the given delay. If there is an evictor
* running when this method is called, it is stopped and replaced with a
* new evictor with the specified delay.</p>
*
* <p>This method needs to be final, since it is called from a constructor.
* See POOL-195.</p>
*
* @param delay time in milliseconds before start and between eviction runs
*/
final void startEvictor(long delay) {
synchronized (evictionLock) {
if (null != evictor) {
EvictionTimer.cancel(evictor);
evictor = null;
evictionIterator = null;
}
if (delay > 0) {
evictor = new Evictor();
EvictionTimer.schedule(evictor, delay, delay);
}
}
}
这里会用EvictionTimer去执行Evictor这个任务。
2.EvictionTimer
对上一篇说的Timer进行了包装
/**
* Add the specified eviction task to the timer. Tasks that are added with a
* call to this method *must* call {@link #cancel(TimerTask)} to cancel the
* task to prevent memory and/or thread leaks in application server
* environments.
* @param task Task to be scheduled
* @param delay Delay in milliseconds before task is executed
* @param period Time in milliseconds between executions
*/
static synchronized void schedule(TimerTask task, long delay, long period) {
if (null == _timer) {
// Force the new Timer thread to be created with a c