摘要:最基本的區(qū)別是會一直保存所有添加的元素,直到顯式地移除。相對地,為了限制內(nèi)存占用,通常都設(shè)定為自動回收元素。消息接收方消息發(fā)起方同步異步注冊事件觸發(fā)事件處理這個錯誤可能是由于中對應(yīng)方法拋出了異常。
緩存
Guava Cache提供了內(nèi)存緩存功能。內(nèi)存緩存需要考慮很多問題,包括并發(fā)問題,緩存失效機(jī)制,內(nèi)存不夠用時緩存釋放,緩存的命中率,緩存的移除等等。 當(dāng)然這些東西Guava都考慮到了。
Guava Cache與ConcurrentMap很相似,但也不完全一樣。最基本的區(qū)別是ConcurrentMap會一直保存所有添加的元素,直到顯式地移除。相對地,Guava Cache為了限制內(nèi)存占用,通常都設(shè)定為自動回收元素。
使用方法如下:
LoadingCachecache = CacheBuilder.newBuilder() .maximumSize(10000) .expireAfterWrite(10, TimeUnit.SECONDS) //統(tǒng)計(jì)緩存的命中率 .recordStats() //緩存被移除時收到通知 .removalListener(new RemovalListener
這樣就得到一個緩存對象,可以對其進(jìn)行操作了:
//獲取緩存項(xiàng) Object value = cache.get("key"); //獲取緩存的命中率等狀態(tài); cache.stats();
也可以在get()時定義數(shù)據(jù)加載源:
Cachecache = CacheBuilder.newBuilder().maximumSize(1000).build(); Object value = cache.get("key", new Callable () { public Object call() { createStudentByKey(key); } });
guava的內(nèi)存緩存非常強(qiáng)大,可以設(shè)置各種選項(xiàng),使用方便。
另外還提供了下面一些方法,來方便各種需要:
--ImmutableMap
--put和putAll方法向緩存中添加一個或者多個緩存項(xiàng)
--invalidate 和 invalidateAll方法從緩存中移除緩存項(xiàng)
--asMap()方法獲得緩存數(shù)據(jù)的ConcurrentMap
--cleanUp()清空緩存
--refresh(Key) 刷新緩存,即重新取緩存數(shù)據(jù),更新緩存
EventBus是Guava框架對觀察者模式的一種實(shí)現(xiàn),使用EventBus可以很簡潔的實(shí)現(xiàn)事件注冊監(jiān)聽和消費(fèi)。Guava框架里面提供了兩種相關(guān)的實(shí)現(xiàn),一種是單線程同步事件消費(fèi),另外一直是多線程異步事件消費(fèi)。
消息接收方:
public class Event { @Subscribe public void sub(String message) { System.out.println(message); } }
消息發(fā)起方:
public void testEventBus() { //同步 EventBus eventBus = new EventBus(); //異步 //AsyncEventBus eventBus = new AsyncEventBus(Executors.newFixedThreadPool(3)); eventBus.register(new Event());//注冊事件 eventBus.post("ssdf");// 觸發(fā)事件處理 }
ps:
com.google.common.eventbus.EventBus$LoggingSubscriberExceptionHandler.handleException Could not dispatch event: XXX
這個錯誤可能是由于lister中@Subscribe對應(yīng)方法拋出了異常。
http://ifeve.com/google-guava...
https://github.com/google/gua...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/70366.html
摘要:前言在上文源碼分析原理中分析了的相關(guān)原理。我在北京模擬執(zhí)行你在哪兒回復(fù)最后執(zhí)行結(jié)果開始提問提問完畢,我去干其他事了收到消息你在哪兒等待響應(yīng)中。。。。。回復(fù)我在北京這樣一個模擬的異步事件回調(diào)就完成了。 showImg(https://segmentfault.com/img/remote/1460000015643387?w=2048&h=1150); 前言 在上文「Guava 源碼分析...
摘要:前言在上文源碼分析原理中分析了的相關(guān)原理。我在北京模擬執(zhí)行你在哪兒回復(fù)最后執(zhí)行結(jié)果開始提問提問完畢,我去干其他事了收到消息你在哪兒等待響應(yīng)中。。。。?;貜?fù)我在北京這樣一個模擬的異步事件回調(diào)就完成了。 showImg(https://segmentfault.com/img/remote/1460000015643387?w=2048&h=1150); 前言 在上文「Guava 源碼分析...
摘要:尼古拉斯沃茲基碩德我們已經(jīng)有了,為什么還需要另外一個庫呢因?yàn)楹糜脝h日常編碼中經(jīng)常會遇到下面的代碼經(jīng)過的修剪后可以變成這樣甚至這樣其實(shí)這種結(jié)構(gòu),就是一個二維映射,把它包裝成了。但的完美處理雙向映射。當(dāng)然,在使用時,會要求的唯一性。 Google Guava是把小巧又鋒利的瑞士軍刀,把你的代碼修剪得整潔又漂亮。-------------尼古拉斯·沃茲基碩德 1. Google Collec...
摘要:緩存總體可分為兩種集中式緩存和分布式緩存集中式緩存與分布式緩存的區(qū)別其實(shí)就在于集中與非集中的概念,其對象可能是服務(wù)器內(nèi)存條硬盤等。內(nèi)存條版本緩存集中在一臺服務(wù)器的一條內(nèi)存條上,為集中式緩存。 背景 緩存的主要作用是暫時在內(nèi)存中保存業(yè)務(wù)系統(tǒng)的數(shù)據(jù)處理結(jié)果,并且等待下次訪問使用。在日長開發(fā)有很多場合,有一些數(shù)據(jù)量不是很大,不會經(jīng)常改動,并且訪問非常頻繁。但是由于受限于硬盤IO的性能或者遠(yuǎn)程...
摘要:緩存總體可分為兩種集中式緩存和分布式緩存集中式緩存與分布式緩存的區(qū)別其實(shí)就在于集中與非集中的概念,其對象可能是服務(wù)器內(nèi)存條硬盤等。內(nèi)存條版本緩存集中在一臺服務(wù)器的一條內(nèi)存條上,為集中式緩存。 背景 緩存的主要作用是暫時在內(nèi)存中保存業(yè)務(wù)系統(tǒng)的數(shù)據(jù)處理結(jié)果,并且等待下次訪問使用。在日長開發(fā)有很多場合,有一些數(shù)據(jù)量不是很大,不會經(jīng)常改動,并且訪問非常頻繁。但是由于受限于硬盤IO的性能或者遠(yuǎn)程...
閱讀 1371·2021-09-10 10:51
閱讀 2835·2019-08-30 15:54
閱讀 3377·2019-08-29 17:11
閱讀 936·2019-08-29 16:44
閱讀 1399·2019-08-29 13:47
閱讀 1095·2019-08-29 13:47
閱讀 1495·2019-08-29 12:23
閱讀 1052·2019-08-28 18:18