void maintenance(@Nullable Runnable task) {
lazySetDrainStatus(PROCESSING_TO_IDLE);
try {
// 读缓存用尽了
drainReadBuffer();
// 写缓存用尽了
drainWriteBuffer();
if (task != null) {
task.run();
}
// key的引用用尽了
drainKeyReferences();
// value的引用用尽了
drainValueReferences();
// 达到过期时间了
expireEntries();
// 达到大小的限制了
evictEntries();
climb();
} finally {
if ((drainStatus() != PROCESSING_TO_IDLE) || !casDrainStatus(PROCESSING_TO_IDLE, IDLE)) {
lazySetDrainStatus(REQUIRED);
}
}
}
void maintenance(@Nullable Runnable task) {
lazySetDrainStatus(PROCESSING_TO_IDLE);
try {
// 读缓存用尽了
drainReadBuffer();
// 写缓存用尽了
drainWriteBuffer();
if (task != null) {
task.run();
}
// key的引用用尽了
drainKeyReferences();
// value的引用用尽了
drainValueReferences();
// 达到过期时间了
expireEntries();
// 达到大小的限制了
evictEntries();
climb();
} finally {
if ((drainStatus() != PROCESSING_TO_IDLE) || !casDrainStatus(PROCESSING_TO_IDLE, IDLE)) {
lazySetDrainStatus(REQUIRED);
}
}
}