原文地址: Guava庫學習:學習Guava Cache(七)RemovalListener(1)_RemovalNotificationhtml
上一篇,Guava庫學習:學習Guava Cache(六)CacheStats中咱們學習了使用CacheStats獲取緩存的一些信息,本篇咱們繼續Guava Cache的學習,在web
Guava庫學習:學習Guava Cache(三)CacheBuilder中,咱們簡單的介紹瞭如何爲緩存增長RemovalListener,接下來,咱們詳細的介紹RemovalListener_RemovalNotification。緩存
就像名字所表名的,當從緩存中移除一個條目時,RemovalListener會被通知,與Java中的大多數Listener相似,RemovalListener被設計成了一個接口,且有一個onRemoval()方法,能夠接收一個RemovalNotification對象,RemovalListener參數化以下:異步
RemovalListener<K,V>學習
其中,K表示咱們想要去監聽的鍵的類型,V表示當緩存條目移除時須要被通知的值的類型,若是咱們想要知道任何被移除的條目,能夠簡單的使用Object作爲K 和V的類型。ui
RemovalNotificationspa
RemovalNotification表示RemovalLitener對象刪除一個條目時接收信號的實例對象,RemovalNotification類實現了Map.Entry接口,所以,咱們能夠訪問緩存條目中實際的鍵和值對象,咱們須要注意的是,當因爲垃圾回收機制條目被移除時,那些value值可能爲null。設計
經過調用RemovalListener實例的getCause()方法,咱們能夠肯定條目被移除的緣由,它將會返回一個RemovalCause的枚舉,枚舉的可能值以下所示:orm
COLLECTED:代表鍵或值被垃圾回收。htm
EXPIRED:代表最近一次寫條目或獲取條目的時間超時。
EXPLICIT:代表用戶手動的移除條目。
REPLACED:代表條目不是真正的被移除,只是value值被改變。
SIZE:代表因爲Cache的長度達到或接近設置的最大限制,條目被移除。
當條目被移除時,若是咱們須要執行任何的操做,最好是異步的進行。