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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java.util.concurrent.FutureTask 源码

發(fā)布時(shí)間:2025/4/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java.util.concurrent.FutureTask 源码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

線程池相關(guān)

源碼:

package java.util.concurrent;import java.util.concurrent.locks.LockSupport;public class FutureTask<V> implements RunnableFuture<V> {private volatile int state;private static final int NEW = 0;private static final int COMPLETING = 1;private static final int NORMAL = 2;private static final int EXCEPTIONAL = 3;private static final int CANCELLED = 4;private static final int INTERRUPTING = 5;private static final int INTERRUPTED = 6;private Callable<V> callable;private Object outcome;private volatile Thread runner;private volatile WaitNode waiters;static final class WaitNode {volatile Thread thread;volatile WaitNode next;WaitNode() {thread = Thread.currentThread();}}public FutureTask(Callable<V> callable) {if (callable == null)throw new NullPointerException();this.callable = callable;this.state = NEW;}public FutureTask(Runnable runnable, V result) {this.callable = Executors.callable(runnable, result);this.state = NEW;}public boolean isCancelled() {return state >= CANCELLED;}public boolean isDone() {return state != NEW;}public boolean cancel(boolean mayInterruptIfRunning) {if (!(state == NEW && UNSAFE.compareAndSwapInt(this, stateOffset, NEW, mayInterruptIfRunning ? INTERRUPTING : CANCELLED)))return false;try {if (mayInterruptIfRunning) {try {Thread t = runner;if (t != null)t.interrupt();} finally {UNSAFE.putOrderedInt(this, stateOffset, INTERRUPTED);}}} finally {finishCompletion();}return true;}public V get() throws InterruptedException, ExecutionException {int s = state;if (s <= COMPLETING)s = awaitDone(false, 0L);return report(s);}public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {if (unit == null)throw new NullPointerException();int s = state;if (s <= COMPLETING && (s = awaitDone(true, unit.toNanos(timeout))) <= COMPLETING)throw new TimeoutException();return report(s);}public void run() {if (state != NEW || !UNSAFE.compareAndSwapObject(this, runnerOffset, null, Thread.currentThread()))return;try {Callable<V> c = callable;if (c != null && state == NEW) {V result;boolean ran;try {result = c.call();ran = true;} catch (Throwable ex) {result = null;ran = false;setException(ex);}if (ran)set(result);}} finally {runner = null;int s = state;if (s >= INTERRUPTING)handlePossibleCancellationInterrupt(s);}}@SuppressWarnings("unchecked")private V report(int s) throws ExecutionException {Object x = outcome;if (s == NORMAL)return (V) x;if (s >= CANCELLED)throw new CancellationException();throw new ExecutionException((Throwable) x);}protected void done() {}protected void set(V v) {if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) {outcome = v;UNSAFE.putOrderedInt(this, stateOffset, NORMAL);finishCompletion();}}protected void setException(Throwable t) {if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) {outcome = t;UNSAFE.putOrderedInt(this, stateOffset, EXCEPTIONAL);finishCompletion();}}protected boolean runAndReset() {if (state != NEW || !UNSAFE.compareAndSwapObject(this, runnerOffset, null, Thread.currentThread()))return false;boolean ran = false;int s = state;try {Callable<V> c = callable;if (c != null && s == NEW) {try {c.call();ran = true;} catch (Throwable ex) {setException(ex);}}} finally {runner = null;s = state;if (s >= INTERRUPTING)handlePossibleCancellationInterrupt(s);}return ran && s == NEW;}private void handlePossibleCancellationInterrupt(int s) {if (s == INTERRUPTING)while (state == INTERRUPTING)Thread.yield();}private void finishCompletion() {for (WaitNode q; (q = waiters) != null; ) {if (UNSAFE.compareAndSwapObject(this, waitersOffset, q, null)) {for (; ; ) {Thread t = q.thread;if (t != null) {q.thread = null;LockSupport.unpark(t);}WaitNode next = q.next;if (next == null)break;q.next = null;q = next;}break;}}done();callable = null;}private int awaitDone(boolean timed, long nanos) throws InterruptedException {final long deadline = timed ? System.nanoTime() + nanos : 0L;WaitNode q = null;boolean queued = false;for (; ; ) {if (Thread.interrupted()) {removeWaiter(q);throw new InterruptedException();}int s = state;if (s > COMPLETING) {if (q != null)q.thread = null;return s;} else if (s == COMPLETING)Thread.yield();else if (q == null)q = new WaitNode();else if (!queued)queued = UNSAFE.compareAndSwapObject(this, waitersOffset, q.next = waiters, q);else if (timed) {nanos = deadline - System.nanoTime();if (nanos <= 0L) {removeWaiter(q);return state;}LockSupport.parkNanos(this, nanos);} elseLockSupport.park(this);}}private void removeWaiter(WaitNode node) {if (node != null) {node.thread = null;retry:for (; ; ) {for (WaitNode pred = null, q = waiters, s; q != null; q = s) {s = q.next;if (q.thread != null)pred = q;else if (pred != null) {pred.next = s;if (pred.thread == null)continue retry;} else if (!UNSAFE.compareAndSwapObject(this, waitersOffset, q, s))continue retry;}break;}}}// Unsafe方法private static final sun.misc.Unsafe UNSAFE;private static final long stateOffset;private static final long runnerOffset;private static final long waitersOffset;static {try {UNSAFE = sun.misc.Unsafe.getUnsafe();Class<?> k = FutureTask.class;stateOffset = UNSAFE.objectFieldOffset(k.getDeclaredField("state"));runnerOffset = UNSAFE.objectFieldOffset(k.getDeclaredField("runner"));waitersOffset = UNSAFE.objectFieldOffset(k.getDeclaredField("waiters"));} catch (Exception e) {throw new Error(e);}}}

類 FutureTask<V>

????類型參數(shù):

????V?- 此 FutureTask 的?get?方法所返回的結(jié)果類型。

????所有已實(shí)現(xiàn)的接口:

????Runnable,?Future<V>,?RunnableFuture<V>

????可取消的異步計(jì)算。利用開始和取消計(jì)算的方法、查詢計(jì)算是否完成的方法和獲取計(jì)算結(jié)果的方法,此類提供了對(duì)?Future?的基本實(shí)現(xiàn)。

????僅在計(jì)算完成時(shí)才能獲取結(jié)果;如果計(jì)算尚未完成,則阻塞?get?方法。一旦計(jì)算完成,就不能再重新開始或取消計(jì)算。

????可使用?FutureTask?包裝?Callable?或?Runnable?對(duì)象。因?yàn)?FutureTask?實(shí)現(xiàn)了?Runnable,所以可將?FutureTask?提交給?Executor?執(zhí)行。

????除了作為一個(gè)獨(dú)立的類外,此類還提供了?protected?功能,這在創(chuàng)建自定義任務(wù)類時(shí)可能很有用。

?

構(gòu)造方法摘要

?

FutureTask(Callable<V>?callable)?
??????????創(chuàng)建一個(gè)?FutureTask,一旦運(yùn)行就執(zhí)行給定的?Callable。
FutureTask(Runnable?runnable,?V?result)?
??????????創(chuàng)建一個(gè)?FutureTask,一旦運(yùn)行就執(zhí)行給定的?Runnable,并安排成功完成時(shí)?get?返回給定的結(jié)果 。

?方法摘要

?booleancancel(boolean?mayInterruptIfRunning)?
??????????試圖取消對(duì)此任務(wù)的執(zhí)行。
protected ?voiddone()?
??????????當(dāng)此任務(wù)轉(zhuǎn)換到狀態(tài)?isDone(不管是正常地還是通過取消)時(shí),調(diào)用受保護(hù)的方法。
?Vget()?
??????????如有必要,等待計(jì)算完成,然后獲取其結(jié)果。
?Vget(long?timeout,?TimeUnit?unit)?
??????????如有必要,最多等待為使計(jì)算完成所給定的時(shí)間之后,獲取其結(jié)果(如果結(jié)果可用)。
?booleanisCancelled()?
??????????如果在任務(wù)正常完成前將其取消,則返回?true。
?booleanisDone()?
??????????如果任務(wù)已完成,則返回?true。
?voidrun()?
??????????除非已將此 Future 取消,否則將其設(shè)置為其計(jì)算的結(jié)果。
protected ?booleanrunAndReset()?
??????????執(zhí)行計(jì)算而不設(shè)置其結(jié)果,然后將此 Future 重置為初始狀態(tài),如果計(jì)算遇到異常或已取消,則該操作失敗。
protected ?voidset(V?v)?
??????????除非已經(jīng)設(shè)置了此 Future 或已將其取消,否則將其結(jié)果設(shè)置為給定的值。
protected ?voidsetException(Throwable?t)?
??????????除非已經(jīng)設(shè)置了此 Future 或已將其取消,否則它將報(bào)告一個(gè)?ExecutionException,并將給定的 throwable 作為其原因。

?從類 java.lang.Object?繼承的方法

clone,?equals,?finalize,?getClass,?hashCode,?notify,?notifyAll,?toString,?wait,?wait,?wait

?

FutureTask

public FutureTask(Callable<V>?callable)

????創(chuàng)建一個(gè)?FutureTask,一旦運(yùn)行就執(zhí)行給定的?Callable。

????參數(shù):

????callable?- 可調(diào)用的任務(wù)。

????拋出:

????NullPointerException?- 如果 callable 為 null。

?

FutureTask

public FutureTask(Runnable?runnable,V?result)

????創(chuàng)建一個(gè)?FutureTask,一旦運(yùn)行就執(zhí)行給定的?Runnable,并安排成功完成時(shí)?get?返回給定的結(jié)果 。

????參數(shù):

????runnable?- 可運(yùn)行的任務(wù)。

????result?- 成功完成時(shí)要返回的結(jié)果。如果不需要特定的結(jié)果,則考慮使用下列形式的構(gòu)造:?Future<?> f = new FutureTask<Object>(runnable, null)

????拋出:

????NullPointerException?- 如果 runnable 為 null。

?

?

isCancelled

public boolean isCancelled()

????從接口?Future?復(fù)制的描述

????????如果在任務(wù)正常完成前將其取消,則返回?true。

????指定者:

????????接口?Future<V>?中的?isCancelled

????返回:

????????如果任務(wù)完成前將其取消,則返回?true

?

?

isDone

public boolean isDone()

????從接口?Future?復(fù)制的描述

????????如果任務(wù)已完成,則返回?true。 可能由于正常終止、異常或取消而完成,在所有這些情況中,此方法都將返回?true。

????指定者:

????????接口?Future<V>?中的?isDone

????返回:

????????如果任務(wù)已完成,則返回?true

?

?

cancel

public boolean cancel(boolean?mayInterruptIfRunning)

????從接口?Future?復(fù)制的描述

????????試圖取消對(duì)此任務(wù)的執(zhí)行。如果任務(wù)已完成、或已取消,或者由于某些其他原因而無法取消,則此嘗試將失敗。當(dāng)調(diào)用?cancel?時(shí),如果調(diào)用成功,而此任務(wù)尚未啟動(dòng),則此任務(wù)將永不運(yùn)行。如果任務(wù)已經(jīng)啟動(dòng),則?mayInterruptIfRunning?參數(shù)確定是否應(yīng)該以試圖停止任務(wù)的方式來中斷執(zhí)行此任務(wù)的線程。

????此方法返回后,對(duì)?Future.isDone()?的后續(xù)調(diào)用將始終返回?true。如果此方法返回?true,則對(duì)?Future.isCancelled()?的后續(xù)調(diào)用將始終返回?true。

????指定者:

????????接口?Future<V>?中的?cancel

????參數(shù):

????mayInterruptIfRunning?- 如果應(yīng)該中斷執(zhí)行此任務(wù)的線程,則為?true;否則允許正在運(yùn)行的任務(wù)運(yùn)行完成

????返回:

????????如果無法取消任務(wù),則返回?false,這通常是由于它已經(jīng)正常完成;否則返回?true

?

get

public V get()throws InterruptedException,ExecutionException

????從接口?Future?復(fù)制的描述

????????如有必要,等待計(jì)算完成,然后獲取其結(jié)果。

????指定者:

????????接口?Future<V>?中的?get

????返回:

????????計(jì)算的結(jié)果

????拋出:

????CancellationException?- 如果計(jì)算被取消

????InterruptedException?- 如果當(dāng)前的線程在等待時(shí)被中斷

????ExecutionException?- 如果計(jì)算拋出異常

?

get

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

????從接口?Future?復(fù)制的描述

????????如有必要,最多等待為使計(jì)算完成所給定的時(shí)間之后,獲取其結(jié)果(如果結(jié)果可用)。

????指定者:

????????接口?Future<V>?中的?get

????參數(shù):

????timeout?- 等待的最大時(shí)間

????unit?- timeout 參數(shù)的時(shí)間單位

????返回:

????????計(jì)算的結(jié)果

????拋出:

????CancellationException?- 如果計(jì)算被取消

????InterruptedException?- 如果當(dāng)前的線程在等待時(shí)被中斷

????ExecutionException?- 如果計(jì)算拋出異常

????TimeoutException?- 如果等待超時(shí)

?

?

done

protected void done()

????當(dāng)此任務(wù)轉(zhuǎn)換到狀態(tài)?isDone(不管是正常地還是通過取消)時(shí),調(diào)用受保護(hù)的方法。默認(rèn)實(shí)現(xiàn)不執(zhí)行任何操作。子類可以重寫此方法,以調(diào)用完成回調(diào)或執(zhí)行簿記。注意,可以查詢此方法的實(shí)現(xiàn)內(nèi)的狀態(tài),從而確定是否已取消了此任務(wù)。

?

?

set

protected void set(V?v)

????除非已經(jīng)設(shè)置了此 Future 或已將其取消,否則將其結(jié)果設(shè)置為給定的值。在計(jì)算成功完成時(shí)通過?run?方法內(nèi)部調(diào)用此方法。

????參數(shù):

????v?- 值

?

setException

protected void setException(Throwable?t)

????除非已經(jīng)設(shè)置了此 Future 或已將其取消,否則它將報(bào)告一個(gè)?ExecutionException,并將給定的 throwable 作為其原因。在計(jì)算失敗時(shí)通過?run?方法內(nèi)部調(diào)用此方法。

????參數(shù):

????t?- 失敗的原因

?

?

run

public void run()

????除非已將此 Future 取消,否則將其設(shè)置為其計(jì)算的結(jié)果。

????指定者:

????????接口?Runnable?中的?run

????指定者:

????????接口?RunnableFuture<V>?中的?run

????另請(qǐng)參見:

????Thread.run()

?

runAndReset

protected boolean runAndReset()

????執(zhí)行計(jì)算而不設(shè)置其結(jié)果,然后將此 Future 重置為初始狀態(tài),如果計(jì)算遇到異常或已取消,則該操作失敗。本操作被設(shè)計(jì)用于那些本質(zhì)上要執(zhí)行多次的任務(wù)。

????返回:

????????如果成功運(yùn)行并重置,則返回 true。

轉(zhuǎn)載于:https://my.oschina.net/langwanghuangshifu/blog/2963574

總結(jié)

以上是生活随笔為你收集整理的java.util.concurrent.FutureTask 源码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品色在线 | 一区二区三区四区在线观看视频 | 国产亚洲一区二区不卡 | 91xxx在线观看 | 成人免费高清视频 | 精品国产乱码久久久久久1区2区 | 国产这里只有精品 | 欧美日韩 一区二区三区 | 黄色录像片子 | mm1313亚洲精品| 激情欧美一区二区免费视频 | 青青在线观看视频 | 日韩毛片在线观看 | 美女色网站 | 97久久人国产精品婷婷 | 波多野结衣福利 | 国产视频a | 欧美久久久久久久 | 午夜视频h| 香蕉国产精品视频 | 国产片天天弄 | 中文在线亚洲 | 国产极品美女在线 | 干老太太视频 | 东方欧美色图 | 无码国产精品一区二区高潮 | 69国产精品视频免费观看 | 国产女人叫床高潮大片免费 | 日本天堂免费a | 免费人成年激情视频在线观看 | 五月综合激情 | 婷婷亚洲激情 | 国产亚洲片 | 青青草伊人| 欧美精品久久久久久久自慰 | 91色九色| 欧美成人免费高清视频 | 国产精品视频一区二区三区, | 动漫av一区 | www.日本色| 亚洲精品大片 | 五月天婷婷激情 | 性做爰视频免费播放大全 | 一级黄色片在线播放 | 美女露胸无遮挡 | 玖玖在线观看 | 国产一级片免费 | 老妇女av | 欧美在线视频不卡 | 美女又黄又免费 | 亚洲成人福利 | 亚洲丁香色 | 激情综合丁香五月 | 九九视频免费看 | 成人国产av一区二区三区 | 日出白浆视频 | 亚洲先锋影音 | 欧美熟妇精品一区二区蜜桃视频 | 人与性动交zzzzbbbb | 亚洲yy| 午夜久久福利 | 免费无码毛片一区二区app | 日本在线免费播放 | a∨鲁丝一区鲁丝二区鲁丝三区 | 奇米影视盒 | 日韩欧美视频一区二区三区 | 日韩欧美区 | 97超碰免费在线 | 黑人中文字幕一区二区三区 | 欧美人体视频一区二区三区 | 亚洲黄视频 | 亚洲视频网站在线观看 | 日韩美在线 | 超级乱淫视频 | 午夜一级在线 | 欧美三级影院 | 国产成人精品一区二区在线小狼 | 国产美女免费观看 | 国模福利视频 | 国产乱码精品一区二区三区亚洲人 | 哺乳援交吃奶在线播放 | 色婷婷综合久久久久中文字幕 | 麻豆成人免费视频 | 特级西西人体wwwww | 91亚洲国产成人久久精品麻豆 | 少妇视频一区 | 欧美日日 | 东北毛片| 亚洲欧美成人一区 | 久久久精品免费观看 | 极品销魂美女一区二区 | 在线国产视频 | 国产在线成人精品午夜 | 青娱乐国产盛宴 | 中文字幕无码毛片免费看 | 日韩欧美亚洲一区二区三区 | 自拍毛片 | 韩国av在线 | 懂色中文一区二区在线播放 |