国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

有用的Guava(二)

Tonny / 885人閱讀

摘要:最基本的區別是會一直保存所有添加的元素,直到顯式地移除。相對地,為了限制內存占用,通常都設定為自動回收元素。消息接收方消息發起方同步異步注冊事件觸發事件處理這個錯誤可能是由于中對應方法拋出了異常。

緩存

Guava Cache提供了內存緩存功能。內存緩存需要考慮很多問題,包括并發問題,緩存失效機制,內存不夠用時緩存釋放,緩存的命中率,緩存的移除等等。 當然這些東西Guava都考慮到了。
Guava Cache與ConcurrentMap很相似,但也不完全一樣。最基本的區別是ConcurrentMap會一直保存所有添加的元素,直到顯式地移除。相對地,Guava Cache為了限制內存占用,通常都設定為自動回收元素。
使用方法如下:

LoadingCache cache = CacheBuilder.newBuilder()  
      .maximumSize(10000)
      .expireAfterWrite(10, TimeUnit.SECONDS)
      //統計緩存的命中率
      .recordStats()
      //緩存被移除時收到通知
      .removalListener(new RemovalListener() {
                    @Override
                    public void onRemoval(RemovalNotification notification) {
                        System.out.println(notification.getKey() + " was removed, cause is " + notification.getCause());
                    }
                })
      //build方法中指定CacheLoader,在緩存不存在時通過CacheLoader的實現自動加載緩存
      .build(new CacheLoader() {
          @Override
          public Student load(String key) throws Exception {
              return createStudentByKey(key);
              }
          });

這樣就得到一個緩存對象,可以對其進行操作了:

 //獲取緩存項
 Object value = cache.get("key");
 //獲取緩存的命中率等狀態;
 cache.stats();

也可以在get()時定義數據加載源:

    Cache cache = CacheBuilder.newBuilder().maximumSize(1000).build();
    Object value = cache.get("key", new Callable() {
                            public Object call() {
                                createStudentByKey(key);
                                }
                           });

guava的內存緩存非常強大,可以設置各種選項,使用方便。
另外還提供了下面一些方法,來方便各種需要:
--ImmutableMap getAllPresent(Iterable keys) 一次獲得多個鍵的緩存值
--put和putAll方法向緩存中添加一個或者多個緩存項
--invalidate 和 invalidateAll方法從緩存中移除緩存項
--asMap()方法獲得緩存數據的ConcurrentMap快照
--cleanUp()清空緩存
--refresh(Key) 刷新緩存,即重新取緩存數據,更新緩存

EventBus

EventBus是Guava框架對觀察者模式的一種實現,使用EventBus可以很簡潔的實現事件注冊監聽和消費。Guava框架里面提供了兩種相關的實現,一種是單線程同步事件消費,另外一直是多線程異步事件消費。
消息接收方:

public class Event {
    @Subscribe
    public void sub(String message) {
        System.out.println(message);
    }

}

消息發起方:

    public void testEventBus() {
        //同步
        EventBus eventBus = new EventBus();
        //異步
        //AsyncEventBus eventBus = new AsyncEventBus(Executors.newFixedThreadPool(3));
        eventBus.register(new Event());//注冊事件
        eventBus.post("ssdf");// 觸發事件處理
    }

ps:
com.google.common.eventbus.EventBus$LoggingSubscriberExceptionHandler.handleException Could not dispatch event: XXX
這個錯誤可能是由于lister中@Subscribe對應方法拋出了異常。

參考資料

http://ifeve.com/google-guava...
https://github.com/google/gua...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70366.html

相關文章

  • Guava 源碼分析(Cache 原理【階段】)

    摘要:前言在上文源碼分析原理中分析了的相關原理。我在北京模擬執行你在哪兒回復最后執行結果開始提問提問完畢,我去干其他事了收到消息你在哪兒等待響應中。。。。?;貜臀以诒本┻@樣一個模擬的異步事件回調就完成了。 showImg(https://segmentfault.com/img/remote/1460000015643387?w=2048&h=1150); 前言 在上文「Guava 源碼分析...

    msup 評論0 收藏0
  • Guava 源碼分析(Cache 原理【階段】)

    摘要:前言在上文源碼分析原理中分析了的相關原理。我在北京模擬執行你在哪兒回復最后執行結果開始提問提問完畢,我去干其他事了收到消息你在哪兒等待響應中。。。。?;貜臀以诒本┻@樣一個模擬的異步事件回調就完成了。 showImg(https://segmentfault.com/img/remote/1460000015643387?w=2048&h=1150); 前言 在上文「Guava 源碼分析...

    dack 評論0 收藏0
  • 有用guava(一)

    摘要:尼古拉斯沃茲基碩德我們已經有了,為什么還需要另外一個庫呢因為好用唄日常編碼中經常會遇到下面的代碼經過的修剪后可以變成這樣甚至這樣其實這種結構,就是一個二維映射,把它包裝成了。但的完美處理雙向映射。當然,在使用時,會要求的唯一性。 Google Guava是把小巧又鋒利的瑞士軍刀,把你的代碼修剪得整潔又漂亮。-------------尼古拉斯·沃茲基碩德 1. Google Collec...

    張憲坤 評論0 收藏0
  • 集中式內存緩存 Guava Cache

    摘要:緩存總體可分為兩種集中式緩存和分布式緩存集中式緩存與分布式緩存的區別其實就在于集中與非集中的概念,其對象可能是服務器內存條硬盤等。內存條版本緩存集中在一臺服務器的一條內存條上,為集中式緩存。 背景 緩存的主要作用是暫時在內存中保存業務系統的數據處理結果,并且等待下次訪問使用。在日長開發有很多場合,有一些數據量不是很大,不會經常改動,并且訪問非常頻繁。但是由于受限于硬盤IO的性能或者遠程...

    Dean 評論0 收藏0
  • 集中式內存緩存 Guava Cache

    摘要:緩存總體可分為兩種集中式緩存和分布式緩存集中式緩存與分布式緩存的區別其實就在于集中與非集中的概念,其對象可能是服務器內存條硬盤等。內存條版本緩存集中在一臺服務器的一條內存條上,為集中式緩存。 背景 緩存的主要作用是暫時在內存中保存業務系統的數據處理結果,并且等待下次訪問使用。在日長開發有很多場合,有一些數據量不是很大,不會經常改動,并且訪問非常頻繁。但是由于受限于硬盤IO的性能或者遠程...

    KitorinZero 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<