我正在尝试使用 Google Guava 构建缓存,并希望对过期对象进行一些计算。如果某个对象被删除,removingListener 会通知我。
如何在与主应用程序不同的线程中运行removingListener,或将过期对象(在下面的简单示例中,即整数3)传递给处理计算的不同线程?
编辑:由于计算相当短,但经常发生,我宁愿不每次都创建一个新线程(将是数千个线程),而是让一个(或可能两个)计算所有对象。
简单的例子:
Cache<String, Integer> cache = CacheBuilder.newBuilder().maximumSize(100)
.expireAfterAccess(100, TimeUnit.NANOSECONDS)
.removalListener(new RemovalListener<String, Integer>() {
public void onRemoval(final RemovalNotification notification) {
if (notification.getCause() == RemovalCause.EXPIRED) {
System.out.println("removed " + notification.getValue());
// do calculation=> this should be in another thread
}
}
})
.build();
cache.put("test1", 3);
cache.cleanUp();