日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

J.U.C系列(四)FutrueTask的使用

發布時間:2025/3/19 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 J.U.C系列(四)FutrueTask的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

FutureTask
FutureTask實現了RunnableFuture接口,RunnableFuture接口繼承于Runnable, Future<V>
這使得FutureTask既可以當做一個任務執行,也可以有 返回值。

public class FutureTask<V> implements RunnableFuture<V> public interface RunnableFuture<V> extends Runnable, Future<V>

FutureTask可以用在需要異步獲取執行結果或者需要取消執行任務的場景,比如一個任務需要耗時很長,但是超過一定時長需要取消的場景,或者這個任務耗時比較長,等主線程完成自己的任務之后再去獲取FutureTask返回的執行結果。
測試代碼如下:

package com.leo.demo.juctest;import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; import java.util.concurrent.TimeUnit;/*** @ClassName: FutureTaskExample* @Description: 關于FutureTask的測試* @Author: leo825* @Date: 2020-05-11 13:19* @Version: 1.0*/ public class FutureTaskExample {public static void main(String[] args) throws ExecutionException, InterruptedException {getThreadLog("主線程開始啟動...");FutureTask<Integer> futureTask = new FutureTask<>(() -> {int result = 0;for (int i = 0; i < 100; i++) {TimeUnit.MILLISECONDS.sleep(10);result += i;}getThreadLog("futureTask執行完開始返回結果:" + result);return result;});//定義一個線程去執行計算Thread cmpThread = new Thread(futureTask);cmpThread.start();//主線程調用其他異步線程去執行任務Thread otherThread = new Thread(() -> {try {int costTime = 2;getThreadLog("模擬調用時長" + costTime + "s");TimeUnit.SECONDS.sleep(costTime);} catch (InterruptedException e) {e.printStackTrace();}});otherThread.start();//主線程等待futureTask返回執行結果getThreadLog("主線程開始等待futureTask返回結果:" + futureTask.get());}/*** 獲取線程名和時間** @return*/public static void getThreadLog(String logContent) {StringBuffer stringBuffer = new StringBuffer();stringBuffer.append("[");stringBuffer.append(Thread.currentThread().getName());stringBuffer.append(" ");stringBuffer.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));stringBuffer.append("]");stringBuffer.append(logContent);System.out.println(stringBuffer.toString());} }

執行結果:

[main 2020-05-11 13:44:06.991]主線程開始啟動... [Thread-1 2020-05-11 13:44:07.129]模擬調用時長2s [Thread-0 2020-05-11 13:44:08.314]futureTask執行完開始返回結果:4950 [main 2020-05-11 13:44:08.315]主線程開始等待futureTask返回結果:4950

總結

以上是生活随笔為你收集整理的J.U.C系列(四)FutrueTask的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。