@Override
    public void run() {
        try {
        	while (! Thread.currentThread().isInterrupted()) {
	            for (CacheKey key : cache.keySet()) {
	            	if (Thread.currentThread().isInterrupted()) {
	            		return;
	            	}
	            	
	            	Date bestAfter = new Date(new Date().getTime() - EXPIRATION_TIME);
	                if (timestamp(key.key, key.resolution).before(bestAfter)) {
	                    remove(key.key, key.resolution);
	                }
                    Thread.sleep(TIME_BETWEEN_EVICTIONS);
	            }
	            Thread.sleep(TIME_BETWEEN_EVICTIONRUNS);
	        }
        } catch (InterruptedException e) {}
    }