精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

三分鐘帶你搞懂 Future 玩法

開發(fā) 前端
本文主要圍繞Future?接口用法做了一次簡單的知識總結,其中FutureTask?類是Future接口中一個非常重要的實現類,通過它可以獲取異步任務執(zhí)行的返回值,通常用于異步計算帶有返回值的任務。
一、摘要

在前幾篇線程系列文章中,我們介紹了線程池的相關技術,任務執(zhí)行類只需要實現Runnable接口,然后交給線程池,就可以輕松的實現異步執(zhí)行多個任務的目標,提升程序的執(zhí)行效率,比如如下異步執(zhí)行任務下載。

// 創(chuàng)建一個線程池
ExecutorService executor = Executors.newFixedThreadPool(2);
// 提交任務
executor.submit(new Runnable() {

    @Override
    public void run() {
        // 執(zhí)行下載某文件任務
        System.out.println("執(zhí)行下載某文件任務");
    }
});

而實際上Runnable接口并不能滿足所有的需求,比如有些場景下,我們想要獲取任務執(zhí)行的返回結果,Runnable接口因為無返回值,只能想辦法通過額外的方式來寫入和讀取,操作起來十分不便。

因此,從 JDK 1.5 開始,Java 標準庫提供了一個Callable接口,與Runnable接口相比,它的方法上多了一個返回值;同時Callable是一個泛型接口,可以返回指定類型的結果,比如如下的實現類!

public class Task implements Callable<String> {

    @Override
    public String call() throws Exception {
        // 執(zhí)行下載某文件任務
        System.out.println("執(zhí)行下載某文件任務");
        return "xxx";
    }
}

問題來了,如何獲取異步執(zhí)行的結果呢?

在 JDK 1.5 中,Java 標準庫還提供了一個Future接口,它可以用來獲取異步執(zhí)行的結果。

下面我們一起來了解一下這個Future接口!

二、Future

Future接口,表示一個可能還沒有完成異步任務的結果,它提供了檢查任務是否已完成、以及等待任務完成并獲取結果等方法。

如果看過ExecutorService.submit()方法,會發(fā)現它的返回參數都是Future類型,Future類型的實例可以用來獲取異步任務執(zhí)行的結果。

下面我們先來看一個簡單的示例,以便于更好的理解!

public class Task implements Callable<String> {
    
    @Override
    public String call() throws Exception {
        // 執(zhí)行下載某文件任務,并返回文件名稱
        System.out.println("thread name:" +  Thread.currentThread().getName() + " 開始執(zhí)行下載任務");
        return "xxx.png";
    }
}
public class FutureTest {

    public static void main(String[] args) throws Exception {
        // 創(chuàng)建一個線程池
        ExecutorService executor = Executors.newFixedThreadPool(1);
        // 初始化一個任務
        Callable<String> task = new Task();
        // 提交任務并獲得Future的實例
        Future<String> future = executor.submit(task);
        // 從Future獲取異步執(zhí)行返回的結果(可能會阻塞等待結果)
        String result =future.get();
        System.out.println("任務執(zhí)行結果:" +  result);

        // 任務執(zhí)行完畢之后,關閉線程池(可選)
        executor.shutdown();
    }
}

輸出結果如下:

thread name:pool-1-thread-1 開始執(zhí)行下載任務
任務執(zhí)行結果:xxx.png

從以上的示例可以清晰的看到,當需要獲取異步線程的執(zhí)行結果返回值時,通常需要搭配使用Future和Callable接口來實現,大體可以用如下步驟來概括:

  • 首先提交一個實現Callable接口的任務到線程池中
  • 然后獲取一個Future類型的對象
  • 最后在主線程中調用Future對象的get()方法,如果異步任務執(zhí)行完成,就可以直接獲得結果;如果異步任務執(zhí)行沒有完成,get()方法會阻塞,直到任務執(zhí)行完成后才能獲取結果

分析源碼你會發(fā)現,Callable接口主要用途是定義一個支持返回結果的方法;重點實現主要集中在Future接口上。

下面我們重點來看下Future接口方法!

2.1、Future 接口方法

方法

描述

get()

獲取結果(會阻塞等待)

get(long timeout, TimeUnit unit)

在指定的時間內獲取結果,如果超時,會拋異常并退出等待狀態(tài)

cancel(boolean mayInterruptIfRunning)

嘗試取消當前任務,當傳入參數為true時,表示嘗試中斷任務的執(zhí)行,false表示不中斷,繼續(xù)執(zhí)行直到完成,如果取消成功,返回true;反之false

isCancelled()

判斷任務是否已取消

isDone()

判斷任務是否已完成

2.2、Future 接口實現類

Future本質其實是一個接口,并不是具體的實現類,真正負責工作的還是它的實現類來完成。

我們還是以上文的線程池ExecutorService.submit()方法為例,看看它用的是哪種實現類!

分析一下源碼,會發(fā)現線程池用的實現類是FutureTask,關鍵核心源碼如下:

protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) {
    return new FutureTask<T>(callable);
}

FutureTask類是一個實現了Future接口所有功能的具體類,可直接使用它來實現獲取異步任務執(zhí)行的結果值。

FutureTask的工作原理其實也并不復雜,它接受一個Callable或者Runnable對象作為參數,然后在線程池執(zhí)行器中執(zhí)行該任務,最后通過get()方法可以同步等待獲取任務的執(zhí)行結果。

真正起到關鍵作用的是,在FutureTask內部,封裝了一個狀態(tài)變量,用于記錄任務的狀態(tài)(等待、運行、完成、取消等),以及任務執(zhí)行結果或異常信息,通過該狀態(tài)變量,我們可以判斷任務是否已完成、以及獲取任務的執(zhí)行結果等信息。

因為FutureTask也實現了Runnable接口,因此我們也可以將FutureTask作為任務,提交給線程池執(zhí)行器。

具體示例如下:

public class FutureTest {

    public static void main(String[] args) throws Exception {
        // 1.創(chuàng)建一個線程池
        ExecutorService executor = Executors.newFixedThreadPool(1);
        // 2.初始化一個任務
        Callable<String> callable = new Task();
        // 3.創(chuàng)建FutureTask對象
        FutureTask<String> futureTask = new FutureTask<>(callable);
        // 4.提交任務給執(zhí)行器執(zhí)行
        executor.execute(futureTask);
        // 5.獲取任務的執(zhí)行結果
        String result = futureTask.get(3, TimeUnit.SECONDS);
        System.out.println("任務執(zhí)行結果:" +  result);
        // 6.關閉線程池(可選)
        executor.shutdown();
    }
}

輸出結果同上!

如果想嘗試取消任務的執(zhí)行,也可以通過如下方式來實現!

boolean isSuccess = futureTask.cancel(true);
System.out.println("任務是否取消成功:" +  isSuccess);

除此之外,如果仔細的分析Future接口的類關系,會發(fā)現它的實現類非常的多,FutureTask只是它的一個基礎實現類而已,部分類關系圖如下!

圖片圖片

其它常用實現類簡介:

  • CompletableFuture:支持傳入回調對象,當異步任務完成或者發(fā)生異常時,自動調用回調對象的回調方法
  • ForkJoinTask:支持把一個大任務拆成多個小任務,然后并行執(zhí)行,在多核 CPU 上可以顯著提升程序的執(zhí)行效率
  • ScheduledFuture:支持周期性定時的執(zhí)行任務,其中ScheduledFutureTask是一個私有類,只能通過ScheduledThreadPoolExecutor初始化操作

關于CompletableFuture、ForkJoinTask和ScheduledFuture,我們會在后面的文章中,再次單獨介紹具體的用法。

三、小結

本文主要圍繞Future接口用法做了一次簡單的知識總結,其中FutureTask類是Future接口中一個非常重要的實現類,通過它可以獲取異步任務執(zhí)行的返回值,通常用于異步計算帶有返回值的任務。

限于篇幅的原因,本文沒有對FutureTask做過深入的原理講解,主要圍繞具體用法進行介紹,有興趣的朋友可以閱讀這篇文章《Java的Future機制詳解》,以便更清晰的了解它的實現原理。

如果有描述不對的地方,歡迎留言指出,共同進步!

四、參考

1.https://www.liaoxuefeng.com/wiki/1252599548343744/1306581155184674

2.https://www.cnblogs.com/xrq730/p/4872722.html

3.https://juejin.cn/post/7231074060787908663

4.https://zhuanlan.zhihu.com/p/54459770

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2024-01-12 07:38:38

AQS原理JUC

2024-07-05 09:31:37

2021-04-20 13:59:37

云計算

2022-02-17 09:24:11

TypeScript編程語言javaScrip

2024-08-30 08:50:00

2020-06-30 10:45:28

Web開發(fā)工具

2023-12-04 18:13:03

GPU編程

2025-02-24 10:40:55

2021-02-03 14:31:53

人工智能人臉識別

2024-09-13 08:49:45

2017-01-18 15:38:20

語言

2020-03-08 16:45:58

數據挖掘學習數據量

2023-01-31 08:24:55

HashMap死循環(huán)

2024-02-22 07:37:37

對象JVM內存

2024-06-06 08:50:43

2023-12-23 18:04:40

服務Eureka工具

2025-11-17 01:11:00

Callback異步編程函數

2024-05-16 11:13:16

Helm工具release

2024-12-18 10:24:59

代理技術JDK動態(tài)代理

2009-11-09 12:55:43

WCF事務
點贊
收藏

51CTO技術棧公眾號

99视频在线精品国自产拍免费观看| 韩日成人影院| av中文一区二区三区| 日本sm极度另类视频| 五月天综合视频| 国产精品一区二区三区av| 亚洲国产aⅴ成人精品无吗| 欧美午夜精品理论片a级大开眼界 欧美午夜精品久久久久免费视 | av中文在线播放| 伊人久久综合视频| 一区二区导航| 欧美高清视频不卡网| 欧美牲交a欧美牲交| 在线免费观看黄色av| 粉嫩高潮美女一区二区三区| 国产成人精品在线观看| 久久高清无码视频| 久久亚洲国产| 亚洲老板91色精品久久| 69久久精品无码一区二区| 国产不卡网站| 亚洲成人自拍偷拍| 一区二区三区日韩视频| 男人天堂亚洲二区| 懂色av中文一区二区三区 | 免费成人深夜天涯网站| 国产成人精品福利| 91精品国产色综合久久久蜜香臀| 粗暴91大变态调教| 99re6在线精品视频免费播放| 国产精品三级电影| 日韩精品av一区二区三区| 囯产精品久久久久久| 极品少妇一区二区三区精品视频| 国产福利视频一区二区| 成年人免费高清视频| 国产综合激情| 欧美精品一区二区免费| 日本少妇aaa| jvid福利在线一区二区| 亚洲人成网站在线播| 亚洲国产综合视频| 久久夜色精品国产噜噜av小说| 欧美一区二区在线看| 亚洲最大天堂网| 成人四虎影院| 欧美三级韩国三级日本三斤| 亚洲精品一二三四五区| 欧洲精品一区二区三区| 欧洲精品一区二区| 久久久国产欧美| 电影一区二区| 欧美日韩国产小视频在线观看| 中文字幕av不卡在线| 91福利精品在线观看| 在线观看视频91| 另类小说色综合| 国产日本久久| 欧美一区二区在线免费观看| 中文字幕在线播放一区二区| 天堂av一区| 亚洲大胆人体在线| 国产麻豆xxxvideo实拍| 啄木系列成人av电影| 亚洲人成在线观看| 老司机精品免费视频| 国产精品麻豆久久| 欧美高清视频免费观看| 久久精品视频8| 国产欧美短视频| 国产91色在线播放| 一区二区www| 国产成人综合网| 极品尤物一区二区三区| 国产中文字幕在线观看| **性色生活片久久毛片| 丁香婷婷综合激情| 男人皇宫亚洲男人2020| 欧美日韩一区二区电影| 三大队在线观看| 免费久久久久久久久| 色先锋资源久久综合5566| 一区视频免费观看| 亚洲欧美日韩精品一区二区| 国产精品亚洲美女av网站| 999av视频| 91女神在线视频| 亚洲五月六月| 超碰在线99| 欧美人与z0zoxxxx视频| 亚洲乱妇老熟女爽到高潮的片 | 天天看片中文字幕| 国产精品久久久亚洲一区| 国产精品电影网| 亚洲爆乳无码一区二区三区| 久久久99精品免费观看| 99久re热视频精品98| a日韩av网址| 日韩一区二区中文字幕| 爱爱的免费视频| 一区二区三区在线| 国产成人高潮免费观看精品| 精品人妻av一区二区三区| 久久久久久久久久美女| 屁屁影院ccyy国产第一页| 影音成人av| 亚洲韩国青草视频| 欧美色视频一区二区三区在线观看 | 亚洲欧洲激情在线| 久久黄色小视频| 久久精品国产一区二区三区免费看| 国产精品一区二区三区在线| 欧美激情黑人| 一本一道久久a久久精品综合蜜臀| 少妇高潮一69aⅹ| 精品久久国产| 91精品国产乱码久久久久久蜜臀 | 日韩制服一区| 日韩av在线免费| 国产极品国产极品| 另类小说视频一区二区| 日本成人三级| 涩涩视频网站在线观看| 日韩欧美综合在线| 国产喷水在线观看| 日韩国产精品大片| 精品国产乱码久久久久软件| 91在线中文| 777久久久精品| 日本综合在线观看| 视频一区二区国产| 欧美日韩免费观看一区| 日本在线啊啊| 亚洲第一偷拍网| 久久久久久蜜桃| 懂色av中文一区二区三区| 久久福利一区二区| 亚洲国产aⅴ精品一区二区| 久久久91精品国产一区不卡| 怡红院成永久免费人全部视频| 久久久精品影视| 国产福利一区视频| 久久99国产精品视频| 欧美中文字幕在线| 三级在线视频| 色天天综合色天天久久| 熟女少妇一区二区三区| 久久精品网址| 日本一区二区三区免费看| 亚洲精品在线影院| 中文字幕亚洲天堂| 国产精品美女一区| 一区二区三区四区在线| 国产亚洲精品成人a| 日韩午夜免费视频| 日本不卡免费新一二三区| 成人做爰免费视频免费看| 日韩亚洲综合在线| 国产高清免费av| 亚洲国产日韩在线一区模特| 男人的天堂影院| 母乳一区在线观看| 日韩精品欧美一区二区三区| 日本一区免费网站| 久久久精品视频在线观看| 亚洲高清视频在线播放| 欧美日韩美女在线观看| 一色道久久88加勒比一| 久热成人在线视频| 亚洲熟妇无码av在线播放| 网友自拍一区| 国产美女精品视频| 久久亚洲导航| 亚洲午夜小视频| 国产免费高清av| 午夜不卡在线视频| 丁香花五月婷婷| 国产精品资源网站| 国产最新免费视频| 天天操综合网| 国产在线一区二区三区四区| av激情成人网| 九九热精品视频| 男人的天堂在线视频| 欧美精品乱码久久久久久| 国产一级性生活| 国产清纯白嫩初高生在线观看91 | 国产女人18毛片水18精| 偷拍一区二区三区四区| 538精品视频| 成人晚上爱看视频| 黄色在线视频网| 亚洲日本激情| 一区二区在线中文字幕电影视频 | 国精品**一区二区三区在线蜜桃| 精品国产av无码一区二区三区| 国模精品一区| 成人女人免费毛片| 中文字幕日本一区二区| 欧美激情2020午夜免费观看| www日韩tube| 日韩电影在线观看中文字幕| 国产精选久久久| 色综合久久中文字幕综合网 | 3d成人动漫在线| 亚洲国产精品人人爽夜夜爽| 91好色先生tv| 日本久久电影网| 国产一级免费av| 国产精品国产三级国产aⅴ入口| 四虎永久免费影院| 国产成人综合网站| 一级片黄色免费| 日韩精品视频网| av免费观看网| 亚洲午夜激情在线| 国产av第一区| 久久亚洲国产| 亚洲人成77777| 国产精品免费不| 久久精品日产第一区二区三区乱码| 国产剧情一区二区在线观看| 国产精品永久免费| 蜜桃精品在线| 欧洲亚洲在线视频| 国产精品xx| 91精品国产精品| 成入视频在线观看| 久久久午夜视频| 黑人玩欧美人三根一起进| 久青草国产97香蕉在线视频| 日韩在线免费电影| 综合网中文字幕| 成人精品一区二区三区免费| 亚洲午夜未删减在线观看| 美女欧美视频在线观看免费| 日韩精品在线免费| 桃花色综合影院| 日韩精品www| 日韩电影网址| 亚洲欧美日韩精品久久亚洲区| 日韩在线无毛| 亚洲精品视频中文字幕| 日韩大胆人体| 亚洲区免费影片| 91在线网址| 欧美成人精品一区二区| 在线观看av免费| 久久久免费观看视频| 丁香高清在线观看完整电影视频| 久久久久国产精品免费| 国精产品一区一区三区mba下载| 久久青草精品视频免费观看| 黄色漫画在线免费看| 午夜精品一区二区三区av| 国产在线美女| 国产v综合v亚洲欧美久久| 在线一区视频观看| 国产日韩av在线| 精品国产亚洲一区二区三区在线 | 97国产真实伦对白精彩视频8| 123区在线| 国产精品mp4| 四虎国产精品成人免费影视| 99porn视频在线| 欧美变态挠脚心| 日本在线播放一区| 五月激情综合| 日韩中字在线观看| 玖玖精品视频| 91精品视频国产| 成人午夜电影小说| 精品无码在线观看| 亚洲欧美一区二区三区孕妇| 国产精品99精品无码视| 色综合久久久久综合| 岳乳丰满一区二区三区| 日韩欧美国产精品| 可以直接在线观看的av| 欧美精品免费看| 欧美大胆成人| 91久久精品一区二区别| 欧美极品中文字幕| 亚洲最新免费视频| 国产情侣一区| www.国产视频.com| 懂色av一区二区夜夜嗨| 无码 人妻 在线 视频| 亚洲精品ww久久久久久p站| 7799精品视频天天看| 欧美一区二区日韩| 九色在线视频| 欧美国产精品va在线观看| 黑人巨大亚洲一区二区久 | blacked蜜桃精品一区| 免费网站永久免费观看| 性色av一区二区怡红| 在线观看av免费观看| 91香蕉视频黄| 熟女少妇a性色生活片毛片| 欧美性猛xxx| 亚洲精品网站在线| 色偷偷亚洲男人天堂| 美女福利一区二区| 国产精品久久久久av福利动漫| 清纯唯美亚洲综合一区| 欧美黑人经典片免费观看| 国产一区二三区| 在线观看亚洲大片短视频| 午夜精品久久久久久久99水蜜桃| 国产又黄又爽视频| 亚洲色图国产精品| yellow字幕网在线| 99久久国产免费免费| 欧美成人激情| av免费网站观看| 91天堂素人约啪| 国产精品99无码一区二区| 日韩三区在线观看| 日本中文字幕伦在线观看| 国产成人jvid在线播放| 台湾佬综合网| 国产黄页在线观看| 成人sese在线| 欧美日韩中文视频| 欧美大胆人体bbbb| 综合久久2019| 亚洲free性xxxx护士白浆| 欧美电影一区| 手机看片一级片| 国产精品久久毛片a| 最近中文字幕av| 一区二区成人精品| 日韩欧美一区二区三区免费观看| 久久国产精品一区二区三区四区| 狠狠噜噜久久| 精品人妻一区二区免费| 亚洲一区二区在线播放相泽| 性生活三级视频| 欧美激情女人20p| а√中文在线天堂精品| 成人免费观看在线| 成人91在线观看| 全部毛片永久免费看| 日韩av在线看| 范冰冰一级做a爰片久久毛片| 欧美18视频| 日韩avvvv在线播放| youjizz亚洲女人| 欧美欧美午夜aⅴ在线观看| 巨大荫蒂视频欧美大片| 亚洲free嫩bbb| 亚洲二区视频| 国产呦小j女精品视频| 色婷婷狠狠综合| 1pondo在线播放免费| 成人综合网网址| 欧美精品二区| 国产精品嫩草av| 色婷婷国产精品| 中文字幕在线免费| 亚洲mm色国产网站| 激情丁香综合| 醉酒壮男gay强迫野外xx| 日本高清不卡视频| 成人在线观看网站| 91免费在线视频| 亚洲精品123区| 99久久久无码国产精品衣服| 欧美精品 日韩| 91精品国产黑色瑜伽裤| 日韩中文不卡| 国产精品一色哟哟哟| 日本一区二区免费在线观看| 夜夜嗨av一区二区三区四区| 国产精品亚洲欧美日韩一区在线| 免费看黄在线看| 日本一区二区动态图| www.香蕉视频| 国产成+人+综合+亚洲欧美丁香花| 99久久久国产精品美女| youjizz.com日本| 精品视频在线免费| 免费在线播放电影| 日韩欧美一区二区三区四区| 国产乱码字幕精品高清av| 天码人妻一区二区三区在线看| 久久精品91久久香蕉加勒比| 欧美久久精品| 九九九九九九九九| 天天影视网天天综合色在线播放| 91免费在线| 精品久久久三级| 国产综合成人久久大片91| 九九精品免费视频| 美日韩精品免费视频| 国产成人精品一区二区免费看京| www日本在线观看| 在线观看一区日韩| 日韩伦理福利|