生活随笔
收集整理的這篇文章主要介紹了
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
;
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();getThreadLog("主線程開始等待futureTask返回結果:" + futureTask
.get());}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的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。