接口
public interface Cache<K, V> {
void put(K key, V value);
void remove(K key);
V get(K key);
}
实现
public class DefaultCache<K,V> implements Cache<K,V> {
private ScheduledExecutorService scheduledExecutorService= Executors.newScheduledThreadPool(1);
private ConcurrentHashMap<K,V> concurrentHashMap = new ConcurrentHashMap<>();
public DefaultCache(){
scheduledExecutorService.schedule( new RefreshJob(),10000, TimeUnit.MILLISECONDS);
}
@Override
public void put(K key, V value) {
concurrentHashMap.put(key,value);
}
@Override
public V get(K key) {
return concurrentHashMap.get(key);
}
@Override
public void remove(K key) {
concurrentHashMap.remove(key);
}
/**
* 执行定时刷新
*/
private class RefreshJob implements Runnable{
@Override
public void run() {
System.out.println("begin------------");
Set<K> keys = concurrentHashMap.keySet();
for(K key: keys){
remove(key);
}
System.out.println("end------------");
}
}
}
Test
public class CacheTest {
public static void main(String[] args) throws InterruptedException {
DefaultCache<String, String> defaultCache = new DefaultCache<>();
defaultCache.put("keyTest1", "keyTest1"+ LocalDateTime.now().toString());
defaultCache.put("keyTest2", "keyTest2" + LocalDateTime.now().toString());
defaultCache.put("keyTest3", "keyTest3" + LocalDateTime.now().toString());
defaultCache.put("keyTest4", "keyTest4" + LocalDateTime.now().toString());
defaultCache.put("keyTest5", "keyTest5" + LocalDateTime.now().toString());
defaultCache.put("keyTest6", "keyTest6" + LocalDateTime.now().toString());
while (true) {
System.out.println("keyTest1:"+defaultCache.get("keyTest1"));
System.out.println("keyTest2:"+defaultCache.get("keyTest2"));
System.out.println("keyTest3:"+defaultCache.get("keyTest3"));
System.out.println("keyTest4:"+defaultCache.get("keyTest4"));
System.out.println("keyTest5:"+defaultCache.get("keyTest5"));
System.out.println("keyTest6:"+defaultCache.get("keyTest6"));
Thread.sleep(1000);
}
}
}
Test结果