亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Gauva使用ListenableFuture介紹說明

 更新時間:2023年01月09日 17:00:33   作者:鯤鵬飛九萬里  
并發(fā)是一個困難問題,但是通過強(qiáng)大和強(qiáng)大的抽象能夠顯著的簡化工作。為了簡化問題,Gauva使用ListenableFuture擴(kuò)展了JDK的Future接口,這篇文章主要介紹了Gauva使用ListenableFuture

一、ListenableFuture 介紹

并發(fā)是一個困難問題,但是通過強(qiáng)大和強(qiáng)大的抽象能夠顯著的簡化工作。為了簡化問題,Gauva使用ListenableFuture擴(kuò)展了JDK的Future接口,

**我們強(qiáng)烈建議你在你所有的代碼中使用ListenableFuture代替Future,**因為:

  • 大多數(shù)的Future方法需要它;
  • 這比以后更改為ListenableFuture更容易;
  • 實用方法的提供者不需要提供FutureListenableFuture方法的變體;

二、接口

傳統(tǒng)的Future代表著異步計算的結(jié)果:一個計算可能也可能沒有完成生成結(jié)果。Future可以是一個程序計算的句柄,一個來自服務(wù)的承諾提供給我們一個結(jié)果。

ListenableFuture允許你注冊一個回調(diào)函數(shù),一旦計算是完成或者計算是已經(jīng)完成,回調(diào)函數(shù)會立馬執(zhí)行。這個簡單的添加能有效的支持多種Future接口不支持的操作。

基礎(chǔ)的操作被ListenableFuture添加是通過addListener(Runnable, Executor),它指定了當(dāng)Future的計算完成之后,指定的Runnable將會在Executor中執(zhí)行。

三、添加回調(diào)函數(shù)

大多數(shù)用戶更喜歡使用Futures.addCallback(ListenableFuture, FutureCallback, Executor),一個FutueCallback有兩個方法:

  • onSuccess(V) 如果future執(zhí)行成功,基于結(jié)果進(jìn)行執(zhí)行。
  • onFailure(Throwable) 如果future執(zhí)行失敗,基于失敗進(jìn)行執(zhí)行。

四、創(chuàng)建

相對于JDKExecutorService.submit(Callable) 方法初始化一個異步的計算。Guava提供了一個ListeningExecutorService 接口,它能在任何ExecutorService返回一個正常Future的地方,返回一個ListenableFuture。為了將ExecutorService轉(zhuǎn)換成ListeningExecutorService ,僅需要使用MoreExecutors.listeningDecorator(executorService)

        ListeningExecutorService service =
                MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(
                  Runtime.getRuntime().availableProcessors()));
        ListenableFuture<String> listenableFuture = service.submit(() -> callDemo());
        Futures.addCallback(listenableFuture, new FutureCallback<String>() {
            @Override
            public void onSuccess(String result) {
                System.out.println("Run Ok : " + result);
//                service.shutdown();
            }
            @Override
            public void onFailure(Throwable t) {
                System.out.println("Run Fail: " + t);
            }
        }, service);

或者,如果你從一個基于FutureTask的API進(jìn)行轉(zhuǎn)換,Guava提供了ListenableFutureTask.create(Callable)ListenableFutureTask.create(Runnable, V) 。并不像JDK,ListenableFutureTask并不意味著直接擴(kuò)展。

如果您更喜歡設(shè)置未來值的抽象而不是實現(xiàn)計算值的方法,請考慮擴(kuò)展 AbstractFuture<V> 或直接使用 SettableFuture

如果你必須將另一個API提供的Future轉(zhuǎn)換成ListenableFuture,你沒有選擇除了使用重量級的JdkFutureAdapters.listenInPoolThread(Future) ,將Future轉(zhuǎn)化成ListenableFuture。無論什么時候,只要有可能,都應(yīng)該修改源代碼去返回一個ListenableFuture。

五、應(yīng)用

使用ListenableFuture的重要原因是,它讓異步的鏈操作成為可能。

很多有效的其它操作使用ListenableFuture是支持的,而單獨使用Future是不支持的。不同的操作能夠被不同的Executor執(zhí)行,并且單個 ListenableFuture 可以有多個等待它的操作。

當(dāng)多個操作應(yīng)該在另一個操作開始時立即開始時——“扇出”——ListenableFuture 才起作用:它觸發(fā)所有請求的回調(diào)。通過稍微多一點的工作,我們能“扇入”,或觸發(fā)ListenableFuture進(jìn)行計算只要若干個其它的Future執(zhí)行完(看:Futures.allAsList)。

方法描述延伸
Futures.transformAsync(ListenableFuture, AsyncFunction, Executor)返回一個新的ListenableFuture,它的結(jié)果是應(yīng)用AsyncFunction。AsyncFunction是對ListenableFuture結(jié)果的加工
Futures.transform(ListenableFuture, Function, Executor)返回一個新的ListenableFuture,它的結(jié)果是應(yīng)用Function。Function是對ListenableFuture結(jié)果的加工
Futures.allAsList(Iterable<ListenableFuture<V>>)返回一個ListenableFuture,它的值是一個list包含了每一個輸入輸入future的值。如果任何的future失敗或取消,這個future也失敗或取消。
Futures.successfulAsList(Iterable<ListenableFuture>)返回一個ListenableFuture,它的值是一個list包含了每一個輸入輸入future的值。如果相對應(yīng)的future失敗或取消,將用null代替。

一個AsyncFunction 提供了一個方法ListenableFuture<B> apply(A a)。它用于異步傳輸一個值。

六、避免內(nèi)嵌的Future

ListenableFuture<ListenableFuture<String>> nestedFuture =
                executorService.submit(() -> otherExecutorService.submit(() -> callDemo())); 

上面的代碼是不正確的, 因為如果外部Future的取消與外部Future的完成競爭,則該取消不會傳播到內(nèi)部Future。 使用 get() 或偵 聽器檢查其他Future的失敗也是一個常見錯誤,但除非特別注意,否則從 otherCallable 拋出的異常將被抑制。

為了避免這種情況,Guava 的所有Future處理方法(以及一些來自 JDK)都有 *Async 版本,可以安全地解開這個嵌套:

  • Futures.transformAsync(ListenableFuture, AsyncFunction, Executor)
  • ExecutorService.submit(Callable)
  • Futures.submitAsync(AsyncCallable, Executor)

到此這篇關(guān)于Gauva使用ListenableFuture介紹說明的文章就介紹到這了,更多相關(guān)Gauva ListenableFuture內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • jwt生成token和token解析基礎(chǔ)詳解

    jwt生成token和token解析基礎(chǔ)詳解

    這篇文章主要為大家介紹了jwt生成token和token解析基礎(chǔ),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • SpringBoot 定時任務(wù)遇到的坑

    SpringBoot 定時任務(wù)遇到的坑

    這篇文章主要介紹了SpringBoot 定時任務(wù)遇到的坑,今天踩的這個坑和 cron 表達(dá)式有關(guān),文中給大家介紹了cron 表達(dá)式的解釋,需要的朋友一起看看吧
    2017-11-11
  • Springboot基于Redisson實現(xiàn)Redis分布式可重入鎖源碼解析

    Springboot基于Redisson實現(xiàn)Redis分布式可重入鎖源碼解析

    這篇文章主要介紹了Springboot基于Redisson實現(xiàn)Redis分布式可重入鎖,本文通過案例源碼分析給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • SpringBoot的配置文件application.yml及加載順序詳解

    SpringBoot的配置文件application.yml及加載順序詳解

    這篇文章主要介紹了SpringBoot的配置文件application.yml及加載順序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • JAVA設(shè)計模式之組合模式原理與用法詳解

    JAVA設(shè)計模式之組合模式原理與用法詳解

    這篇文章主要介紹了JAVA設(shè)計模式之組合模式,簡單說明了組合模式的原理,并結(jié)合實例分析了java組合模式的具體用法,需要的朋友可以參考下
    2017-08-08
  • Java和Redis實現(xiàn)熱搜功能

    Java和Redis實現(xiàn)熱搜功能

    這篇文章主要介紹了Java和Redis實現(xiàn)熱搜功能,在存儲和傳輸用戶搜索數(shù)據(jù)時,考慮到數(shù)據(jù)的機(jī)密性和隱私保護(hù),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • 本地安裝Nacos的踩坑過程及解決

    本地安裝Nacos的踩坑過程及解決

    這篇文章主要介紹了本地安裝Nacos的踩坑過程及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Springboot實現(xiàn)自定義錯誤頁面的方法(錯誤處理機(jī)制)

    Springboot實現(xiàn)自定義錯誤頁面的方法(錯誤處理機(jī)制)

    這篇文章主要介紹了Springboot實現(xiàn)自定義錯誤頁面的方法(錯誤處理機(jī)制),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • springboot?vue測試平臺接口定義前后端新增功能實現(xiàn)

    springboot?vue測試平臺接口定義前后端新增功能實現(xiàn)

    這篇文章主要介紹了springboot?vue測試平臺接口定義前后端新增功能實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 通過java備份恢復(fù)mysql數(shù)據(jù)庫的實現(xiàn)代碼

    通過java備份恢復(fù)mysql數(shù)據(jù)庫的實現(xiàn)代碼

    這篇文章主要介紹了如何通過java備份恢復(fù)mysql數(shù)據(jù)庫,其實一般情況下通過bat或sh就可以,這里主要是介紹了java的實現(xiàn)思路,喜歡的朋友可以參考下
    2013-09-09

最新評論