Google Guavaでキャッシュを構築しようとしていますが、期限切れのオブジェクトに対して計算を実行したいと思います。一部のオブジェクトが削除された場合、removalListenerは通知します。
メインアプリケーションとは別のスレッドでremovalListenerを実行したり、期限切れのオブジェクト(以下の簡単な例では整数3)を計算を処理する別のスレッドに渡すにはどうすればよいですか?
編集:計算はかなり短いですが、頻繁に発生するため、毎回新しいスレッドを作成するのではなく(数千のスレッドになります)、すべてのオブジェクトを計算する1人(または2人)がいます。
簡単な例:
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();