JAVA中的什么类可以组织检查缓存中的TimeToLive?

What classes in JAVA can organize checking of TimeToLive in cache?

我正在 java 开发磁盘中的图像缓存。缓存请求之一是 TimeToLive 参数。我真的不知道,该怎么做,这就是我问你的原因。

据我了解,一些独立于主线程的方法应该检查缓存中每个对象的 TTL 参数。如果该值超过,则应删除对象。例如,每分钟检查一次。

假设您的缓存是一个包含图像的目录,您可以像这样清除缓存:

private static void purge(File dir, long ttl) {
    long minTime = System.currentTimeMillis()-ttl;
    for (File file: dir.listFiles()) {
        if (file.lastModified() < minTime) {
            file.delete();
        }
    }
}

现在,如果您想定期执行此操作,则需要一个计时器:

private static final Timer TIMER = new Timer();

然后您可以安排清除任务:

    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            purge(dir, ttl);
        }
    };
    TIMER.schedule(task, period, period);

当不再需要时应取消该任务。

你可以把它们放在一起 class:

public class Cache implements Closeable {
    private static final Timer TIMER = new Timer(true);

    private final File dir;
    private final long ttl;
    private final TimerTask task;

    public Cache(File dir, long ttl, long purgePeriod) {
        this.dir = dir;
        this.ttl = ttl;
        task = new TimerTask() {
            @Override
            public void run() {
                purge();
            }
        };
        TIMER.schedule(task, purgePeriod, purgePeriod);
    }

    @Override
    public void close() throws IOException {
        task.cancel();
    }

    public synchronized void purge() {
        long minTime = System.currentTimeMillis()-ttl;
        for (File file: dir.listFiles()) {
            if (file.isFile() && file.lastModified() < minTime) {
                file.delete();
            }
        }
    }
}