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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Future源码解读

發布時間:2025/3/11 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Future源码解读 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Future源碼解讀

    • 〇、[源碼版本] jdk 1.8
    • 一、Future概述
      • [舉例1]示例代碼
      • [舉例2]示例代碼
      • 內存一致性影響
    • 二、Future接口的方法
      • cancel方法
      • isCancelled方法
      • isDone方法
      • get方法

〇、[源碼版本] jdk 1.8

一、Future概述

Future表示異步計算的結果。提供了檢查計算是否完成、等待計算完成以及檢索計算結果的方法。

結果只能在計算完成后使用方法get取回,必要時阻塞,直到它準備好。

取消由cancel方法執行。

提供了其他方法來確定任務是正常完成還是被取消。計算一旦完成,就不能取消計算。

如果您想使用Future來實現可取消性,但不提供可用結果,您可以聲明Future<?>形式的類型并返回null作為基礎任務的結果。

[舉例1]示例代碼

interface ArchiveSearcher { String search(String target); }class App {ExecutorService executor = ...ArchiveSearcher searcher = ...void showSearch(final String target) throws InterruptedException {Future<String> future = executor.submit(new Callable<String>() {public String call() {return searcher.search(target);}});displayOtherThings(); // 在處理search的時候,異步處理其他事try {displayText(future.get()); // 使用future} catch (ExecutionException ex) { cleanup(); return; }}}

FutureTask類是Future的實現,它實現了Runnable,因此可以由Executor執行。例如,上面帶有submit的構造可以替換為

[舉例2]示例代碼

FutureTask<String> future = new FutureTask<String>(new Callable<String>() {public String call() {return searcher.search(target);}});executor.execute(future);

內存一致性影響

異步計算采取的動作,內存可見性發生在另一個線程中對應Future.get()的操作之前。

二、Future接口的方法

cancel方法

boolean cancel(boolean mayInterruptIfRunning);

嘗試取消此任務的執行。

如果任務已完成、已被取消、或由于某些其他原因無法取消,則此嘗試將失敗。

如果成功,并且在調用cancel時此任務尚未啟動,此任務不應運行。

如果任務已經開始,那么mayInterruptIfRunning參數確定執行此任務的線程是否應該在嘗試停止任務時被中斷。

a.參數:
mayInterruptIfRunning 執行此任務的線程是否應該被中斷;否則,允許進行中的任務完成
b.返回:
true 任務取消執行
false 如果任務無法取消,通常是因為它已經正常完成
c.異常:無

isCancelled方法

boolean isCancelled();

如果此任務在正常完成之前被取消,則返回true。

a.參數:無
b.返回:
true 如果此任務在正常完成之前被取消
c.異常:無

isDone方法

boolean isDone();

如果此任務完成,則返回true。完成可能是由于正常終止、異常或取消——在所有這些情況下,此方法將返回true。

a.參數:無
b.返回:
true 如果此任務完成
c.異常:無

get方法

V get() throws InterruptedException, ExecutionException;

如有必要,等待計算完成,然后取回其結果。

a.參數:無
b.返回:
V 計算結果
c.異常:
throws CancellationException 如果計算被取消
throws ExecutionException 如果計算拋出異常
throws InterruptedException 如果當前線程在等待時被中斷

V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;

如有必要,最多等待給定的計算時間完成,然后取回其結果(如果可用)。

a.參數:
timeout 最長等待時間
unit 超時參數timeout的時間單位
b.返回:
V 計算結果
c.異常:
throws CancellationException 如果計算被取消
throws ExecutionException 如果計算拋出異常
throws InterruptedException 如果當前線程在等待時被中斷
throws TimeoutException 如果等待超時

總結

以上是生活随笔為你收集整理的Future源码解读的全部內容,希望文章能夠幫你解決所遇到的問題。

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