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

Java中的FutureTask實現(xiàn)代碼實例

 更新時間:2023年12月31日 09:06:01   作者:_Romeo  
這篇文章主要介紹了Java中的FutureTask手寫代碼實例,FutureTask是Future的實現(xiàn),用來異步任務的獲取結果,可以啟動和取消異步任務,查詢異步任務是否計算結束以及獲取最終的異步任務的結果,需要的朋友可以參考下

FutureTask實現(xiàn)

FutureTask是Future的實現(xiàn),用來異步任務的獲取結果,可以啟動和取消異步任務,查詢異步任務是否計算結束以及獲取最終的異步任務的結果。

通過get()方法來獲取異步任務的結果,但是會阻塞當前線程直至異步任務執(zhí)行結束。

一旦任務執(zhí)行結束,任務不能重新啟動或取消,除非調用runAndReset()方法

代碼示例:

public class ThreadTest_Demo {
    static ExecutorService executors = Executors.newScheduledThreadPool(2);
    public ThreadTest_Demo() {
    }
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        Callable<String> callable = new Callable<String>() {
            public String call() throws Exception {
                String str = "返回某個數(shù)據(jù)!";
                return str;
            }
        };
        Future<String> submit = executors.submit(callable);
        KaneFutureTask<String> futureTask = new KaneFutureTask(callable);
        (new Thread(futureTask)).start();
        System.out.println((String)futureTask.get());
    }
}

實現(xiàn)一個自己的FutureTask

根據(jù)FutureTask核心原理,要實現(xiàn)一個FutureTask必須滿足以下方面:

  • 需要泛型定義用以返回結果類型
  • 需要一個callable對象,在構造方法中傳入
  • 需要實現(xiàn)runnable接口,在run方法中實現(xiàn)具體結果計算
  • 需要一個公開的get方法來獲取結果
  • 如果線程沒有執(zhí)行完,則調用get方法的線程需要進入等待隊列
  • 需要一個字段記錄線程執(zhí)行的狀態(tài)
  • 需要一個等待隊列存儲等待結果的線程

代碼示例:

public class KaneFutureTask<T> implements Runnable {
    private Callable<T> callable;
    T result;//返回的結果
    volatile String state = "NEW";//線程執(zhí)行的狀態(tài)
    LinkedBlockingQueue<Thread> waiters = new LinkedBlockingQueue();//存儲等待結果的線程
    public KaneFutureTask(Callable<T> callable) {
        this.callable = callable;
    }
	//run()方法未執(zhí)行未必,阻塞
    public T get() {
        if ("END".equals(this.state)) {
            return this.result;
        } else {
            while(!"END".equals(this.state)) {//這里開始阻塞
            	//把線程存放到容器中
                this.waiters.offer(Thread.currentThread());
                //阻塞
                LockSupport.park();
            }
            return this.result;
        }
    }
    public void run() {
        try {
        	//執(zhí)行Callable的call方法
            this.result = this.callable.call();
        } catch (Exception var5) {
            var5.printStackTrace();
        } finally {
        	//線程狀態(tài)修改
            this.state = "END";
        }
		//從容器中取出當前線程
		Thread waiter = (Thread)this.waiters.poll();
        for(waiter != null) {
        	//取消阻塞
            LockSupport.unpark(waiter);
            waiter = (Thread)this.waiters.poll()
        }
    }
}

到此這篇關于Java中的FutureTask手寫代碼實例的文章就介紹到這了,更多相關FutureTask代碼實例內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • springboot openfeign從JSON文件讀取數(shù)據(jù)問題

    springboot openfeign從JSON文件讀取數(shù)據(jù)問題

    今天主要說一下在openfeign里讀取JSON文件的問題,我們將測試所需要的數(shù)據(jù)存儲到文件里,在修改時關注點比較單純
    2018-06-06
  • javaSE泛型、反射與注解的核心原理與實際應用

    javaSE泛型、反射與注解的核心原理與實際應用

    在日常開發(fā)中,必不可少的會使用到泛型,這篇文章主要介紹了javaSE泛型、反射與注解的核心原理與實際應用的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-08-08
  • Java實現(xiàn)大文件的切割與合并操作示例

    Java實現(xiàn)大文件的切割與合并操作示例

    這篇文章主要介紹了Java實現(xiàn)大文件的切割與合并操作,結合實例形式分析了java基于io及util操作大文件按指定個數(shù)分割與合并相關操作技巧,需要的朋友可以參考下
    2018-07-07
  • Java 模擬cookie登陸簡單操作示例

    Java 模擬cookie登陸簡單操作示例

    這篇文章主要介紹了Java 模擬cookie登陸簡單操作,結合實例形式分析了Java 模擬cookie登陸的相關原理與基本實現(xiàn)技巧,需要的朋友可以參考下
    2020-03-03
  • Java多種方式實現(xiàn)Excel轉Pdf的保姆級教程

    Java多種方式實現(xiàn)Excel轉Pdf的保姆級教程

    在企業(yè)級系統(tǒng)使用或日常使用中,我們經(jīng)常使用excel表格數(shù)據(jù)進行瀏覽數(shù)據(jù),但有時候我們會想要將excel轉換成pdf進行預覽使用,本篇博文以java進行編寫多種實現(xiàn)方式實現(xiàn)多sheet頁excel轉換一個pdf的需求,需要的朋友可以參考下
    2025-08-08
  • Java數(shù)據(jù)結構之平衡二叉樹的實現(xiàn)詳解

    Java數(shù)據(jù)結構之平衡二叉樹的實現(xiàn)詳解

    平衡二叉樹又被稱為AVL樹(有別于AVL算法),且具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,并且左右兩個子樹都是一棵平衡二叉樹。本文將詳解介紹一下平衡二叉樹的原理與實現(xiàn),需要的可以參考一下
    2022-03-03
  • java 文件大數(shù)據(jù)Excel下載實例代碼

    java 文件大數(shù)據(jù)Excel下載實例代碼

    這篇文章主要介紹了java 文件大數(shù)據(jù)Excel下載實例代碼的相關資料,需要的朋友可以參考下
    2017-04-04
  • Java超詳細講解多態(tài)的調用

    Java超詳細講解多態(tài)的調用

    多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量到底會指向哪個類的實例對象,該引用變量發(fā)出的方法調用到底是哪個類中實現(xiàn)的方法,必須在由程序運行期間才能決定
    2022-05-05
  • SpringBoot整合Mybatis-Plus+Druid實現(xiàn)多數(shù)據(jù)源配置功能

    SpringBoot整合Mybatis-Plus+Druid實現(xiàn)多數(shù)據(jù)源配置功能

    本文主要講解springboot?+mybatisplus?+?druid?實現(xiàn)多數(shù)據(jù)源配置功能以及一些必要的準備及代碼說明,具有一定的參考價值,感興趣的小伙伴可以借鑒一下
    2023-06-06
  • Java中輸入被跳過情況的深入探究

    Java中輸入被跳過情況的深入探究

    這篇文章主要給大家介紹了關于Java中輸入被跳過情況的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04

最新評論

广丰县| 东兰县| 舞钢市| 赤水市| 乌鲁木齐市| 太白县| 淮阳县| 安化县| 潮州市| 兴安县| 文水县| 汤阴县| 邹平县| 政和县| 宜兴市| 林口县| 东丽区| 河东区| 黄陵县| 梧州市| 龙海市| 东丽区| 香格里拉县| 西青区| 林西县| 田阳县| 虹口区| 屯门区| 周宁县| 安塞县| 新巴尔虎左旗| 铅山县| 东乌珠穆沁旗| 青冈县| 临湘市| 二连浩特市| 海原县| 南汇区| 当阳市| 潼南县| 博野县|