【发布时间】:2015-06-17 14:47:56
【问题描述】:
番石榴 18.0.
我正在尝试解决 refreshAfterWrite
我认为使用以下代码
return the **key on load**
after 3 seconds
return update the key to uppercase (automatically)
这是加载器
ExecutorService executor = Executors.newCachedThreadPool();
mockLoader = new CacheLoader<String, String>() {
//return key
@Override
public String load(String key) throws Exception {
System.out.println("loaindg.....");
return key;
}
// load-behind. asyn loading.
@Override
public ListenableFuture<String> reload(final String key, String result) {
ListenableFutureTask<String> task = ListenableFutureTask.create(new Callable<String>() {
public String call() {
System.out.println("reloaindg.....");
return key.toUpperCase();
}
});
executor.execute(task);
return task;
}
};
}
这是缓存
cache.setRefreshAfterWrite(3);
cache.setCacehLoader(mockLoader);
但在测试中,重新加载没有按预期发生。
String key = "a";
String firstGet = cache.get(key);
assertTrue(key.equals(firstGet));
sleep(refrehTime + 3);
// I must use the get to trigger the reload
String secondGet = cache.get(key);
assertTrue(key.toUpperCase().equals(secondGet));
这是正确的吗?
可以自动触发重载吗?
【问题讨论】: