最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用FutureTask實現(xiàn)預加載的示例詳解

 更新時間:2023年06月20日 11:45:50   作者:海塔燈  
基于FutureTask的特性,通??梢允褂肍utureTask做一些預加載工作,比如一些時間較長的計算等,本文就來和大家講講具體實現(xiàn)方法吧,感興趣的可以了解一下

FutureTask介紹

FutureTask也可以用作閉鎖;FutureTask的計算是通過Callable來實現(xiàn)的,相當于一種可生成結(jié)果的Runnable,并且可以處于3種狀態(tài),分別是等待運行(waiting to run)、正在運行(Running)、和運行完成(Completed),而運行完成表示計算的所有可能結(jié)束方式,包括正常結(jié)束,由于取消而結(jié)束由于異常而結(jié)束等,當FutureTask進入完成狀態(tài)后,它就會永遠停止在這個狀態(tài)上。我們可以使用Future.get()方法獲取任務執(zhí)行的狀態(tài)。

使用場景

Future.get的行為取決于任務的狀態(tài),如果任務已經(jīng)完成,那么get會立即返回結(jié)果,否則get方法將阻塞直到任務進入完成狀態(tài),然后返回結(jié)果或者拋出異常,F(xiàn)utureTask將計算結(jié)果從執(zhí)行計算的線程傳遞到獲取這個結(jié)果的線程,而FutureTask的規(guī)范確保了這種傳遞過程能實現(xiàn)結(jié)果的正確性

基于FutureTask的特性,通??梢允褂肍utureTask做一些預加載工作,比如一些時間較長的計算,這些計算可以在使用計算結(jié)果之前啟動,并且計算的結(jié)果將在稍后是同,通過提前啟動計算,可以減少等待結(jié)果時需要的時間

實例解析

假設(shè)我們要加載一個產(chǎn)品信息,使用FutureTask來執(zhí)行一個高開銷的計算。代碼如下所示: 首先簡單寫一個產(chǎn)品的Bean類:

    static class ProductInfo {
        public ProductInfo(String name, String order_id) {
            this.name = name;
            this.order_id = order_id;
        }
        private String name;
        private String order_id;
        @Override
        public String toString() {
            return "ProductInfo{" +
                    "name='" + name + '\'' +
                    ", order_id='" + order_id + '\'' +
                    '}';
        }
    }

然后使用FutureTask實現(xiàn)一個產(chǎn)品信息預加載功能:

    static class Preloader {
        public void start() {
            thread.start();
        }
        private final FutureTask<ProductInfo> futureTask =
                new FutureTask<>(new Callable<ProductInfo>() {
                    @Override
                    public ProductInfo call() throws Exception {
                        return loadProductInfo();
                    }
                });
        public ProductInfo get() throws ExecutionException, 
        InterruptedException {
            return futureTask.get();
        }
        private final Thread thread = new Thread(futureTask);
        private ProductInfo loadProductInfo() {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            return new ProductInfo("衣服", "9527");
        }
    }

驗證代碼:

    Preloader preloader = new Preloader();
        preloader.start();
        System.out.println("start get product info before"
         + System.currentTimeMillis() / 1000);
        ProductInfo productInfo = null;
        try {
            productInfo = preloader.get();
        } catch (ExecutionException | InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("start get product info afte" 
        +System.currentTimeMillis() / 1000);
        System.out.println("productInfo: " + productInfo);

如上面的代碼所示:Preloader創(chuàng)建了一個FutureTask,其中包含了加載產(chǎn)品信息的任務,以及一個執(zhí)行運算的線程。我們增加了一個 Thread.sleep(5000);模擬加載耗時。由于在構(gòu)造函數(shù)或者靜態(tài)初始化方法中啟動線程不是一種好方法,所以提供了一個start方法來啟動線程,當程序后面需要ProductInfo結(jié)果時,可以調(diào)用Preloader提供的get方法,如果數(shù)據(jù)已經(jīng)加載,那么會返回這些數(shù)據(jù),否則將等待加載完成后再返回。

到此這篇關(guān)于Java使用FutureTask實現(xiàn)預加載的示例詳解的文章就介紹到這了,更多相關(guān)Java FutureTask預加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot項目啟動自動跳轉(zhuǎn)到瀏覽器的操作代碼

    springboot項目啟動自動跳轉(zhuǎn)到瀏覽器的操作代碼

    這篇文章主要介紹了springboot項目啟動自動跳轉(zhuǎn)到瀏覽器的操作代碼,本文圖文實例代碼相結(jié)合給大家介紹的非常詳細,需要的朋友可以參考下
    2024-03-03
  • Mybatis實現(xiàn)分頁查詢的詳細流程

    Mybatis實現(xiàn)分頁查詢的詳細流程

    這篇文章主要給大家介紹了關(guān)于Mybatis實現(xiàn)分頁查詢的詳細流程,MyBatis是支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架,需要的朋友可以參考下
    2023-08-08
  • Java中BM(Boyer-Moore)算法的圖解與實現(xiàn)

    Java中BM(Boyer-Moore)算法的圖解與實現(xiàn)

    本文主要介紹了兩個大的部分,第一部分通過圖解的方式講解BM算法,第二部分則代碼實現(xiàn)一個簡易的BM算法,感興趣的小伙伴可以學習一下
    2022-05-05
  • 深入理解Java中的類加載器原理

    深入理解Java中的類加載器原理

    這篇文章主要介紹了深入理解Java中的類加載器原理,類加載器負責加載所有的類,系統(tǒng)為所有被載入內(nèi)存中的類生成一個java.lang.Class實例,需要的朋友可以參考下
    2024-01-01
  • Java多線程知識點全面總結(jié)

    Java多線程知識點全面總結(jié)

    這篇文章主要介紹了Java多線程知識點全面總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java設(shè)計通用的返回數(shù)據(jù)格式過程講解

    Java設(shè)計通用的返回數(shù)據(jù)格式過程講解

    現(xiàn)在很多的項目server端返回client端的數(shù)據(jù)多數(shù)以JSON格式返回,同時結(jié)合其它需要,通常加一下狀態(tài)碼和信息之類,給前端處理帶來很大的方便,這篇文章就用Java設(shè)計了通用的返回數(shù)據(jù)格式,感興趣的同學可以參考下文
    2023-05-05
  • 一文解析Java如何連接FTP服務器

    一文解析Java如何連接FTP服務器

    Java 提供了強大的工具和庫來實現(xiàn)與 FTP 服務器的連接、文件傳輸、目錄操作等功能,本文將詳細介紹如何使用 Java 連接 FTP 服務器,需要的可以參考下
    2024-12-12
  • java為什么使用BlockingQueue解決競態(tài)條件問題面試精講

    java為什么使用BlockingQueue解決競態(tài)條件問題面試精講

    這篇文章主要為大家介紹了java為什么使用BlockingQueue解決競態(tài)條件問題面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Java觀察者模式之實現(xiàn)對象間的一對多依賴

    Java觀察者模式之實現(xiàn)對象間的一對多依賴

    這篇文章主要介紹了Java觀察者模式之實現(xiàn)對象間的一對多依賴的方法,Java觀察者模式是一種行為型設(shè)計模式,用于實現(xiàn)對象之間的消息傳遞和通信,文中有詳細的實現(xiàn)步驟和代碼示例,,需要的朋友可以參考下
    2023-05-05
  • JavaWeb如何發(fā)送狀態(tài)碼方法解析

    JavaWeb如何發(fā)送狀態(tài)碼方法解析

    這篇文章主要介紹了JavaWeb如何發(fā)送狀態(tài)碼方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02

最新評論

新和县| 新乡市| 西峡县| 临湘市| 黄平县| 星座| 宁波市| 武强县| 南昌县| 原平市| 平凉市| 乌恰县| 东明县| 齐齐哈尔市| 克山县| 灵台县| 寿光市| 江口县| 闵行区| 定结县| 湘潭市| 桃园县| 贺州市| 连江县| 华宁县| 兴化市| 冕宁县| 呼图壁县| 贵州省| 玛多县| 确山县| 新源县| 东丰县| 莆田市| 夏邑县| 阳东县| 靖西县| 四川省| 宜州市| 龙川县| 淮阳县|