中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

工程造價(jià)材料信息網(wǎng)山東seo推廣

工程造價(jià)材料信息網(wǎng),山東seo推廣,私自建設(shè)網(wǎng)站,做的最好的美女視頻網(wǎng)站有哪些文章目錄 1.介紹2.使用示例3.執(zhí)行過(guò)程描述4.整體的關(guān)系5.涉及到的核心源碼(只提取了關(guān)鍵代碼)5.1 Callable5.2 RunnableFuture5.3 FutureTask5.4 Thread 1.介紹 FutureTask 能夠接收 Callable 類(lèi)型的參數(shù),用來(lái)處理有返回結(jié)果的情況。 2.使用…

文章目錄

  • 1.介紹
  • 2.使用示例
  • 3.執(zhí)行過(guò)程描述
  • 4.整體的關(guān)系
  • 5.涉及到的核心源碼(只提取了關(guān)鍵代碼)
    • 5.1 Callable
    • 5.2 RunnableFuture
    • 5.3 FutureTask
    • 5.4 Thread

1.介紹

FutureTask 能夠接收 Callable 類(lèi)型的參數(shù),用來(lái)處理有返回結(jié)果的情況。

2.使用示例

// 創(chuàng)建任務(wù)對(duì)象
FutureTask<Integer> task = new FutureTask<>(() -> {log.debug("running");Thread.sleep(1000);return 200;
});new Thread(task).start();// 主線程阻塞,同步等待 task 執(zhí)行完畢的結(jié)果
Integer value = task.get();System.out.println("value = " + value);

3.執(zhí)行過(guò)程描述

  1. FutureTask 類(lèi)在實(shí)例化構(gòu)造時(shí)需要傳入一個(gè)實(shí)現(xiàn)了 Callable 接口的類(lèi),實(shí)現(xiàn) Callable 接口需要重寫(xiě) call 方法,該方法需要一個(gè)返回值,由于 Callable 定義時(shí)是以泛型定義返回值,因此我們可以自定義返回值。FutureTask 會(huì)將傳入的這個(gè) Callable 實(shí)現(xiàn)類(lèi)賦給自己的屬性 private Callable<V> callable;
  2. FutureTask 間接實(shí)現(xiàn)了 Runnable 接口,并重寫(xiě)了 run 方法,重寫(xiě)的 run 方法中會(huì)調(diào)用到 屬性 callable 的 call 方法,并將 call 方法返回值存儲(chǔ)到自己的屬性 private Object outcome;
  3. Thread 類(lèi)在實(shí)例化構(gòu)造時(shí)可以傳入一個(gè) Runnable 接口的類(lèi),由于 FutureTask 實(shí)現(xiàn)了 Runnable 接口,因此我們可以直接將 FutureTask 對(duì)象作為構(gòu)造器實(shí)參賦給 Thread對(duì)象的屬性 private Runnable target;
  4. Thread 對(duì)象調(diào)用 start 方法,最終會(huì)調(diào)用到自身就重寫(xiě)了的 run 方法,自身重寫(xiě)的 run 方法中又會(huì)調(diào)用到 target 的 run 方法,即 FutureTask 自身已經(jīng)重寫(xiě)的 run 方法,這時(shí)候就可以回到“第 2 點(diǎn)講解”,了解到 FutureTask 的 run 方法中所做的事情。
  5. FutureTask 對(duì)象的 get() 方法,是去獲取 callable 的 call 方法返回值,即屬性 outcome 的值。get 方法中會(huì)調(diào)用 awaitDone 方法,awaitDone 方法中會(huì)使用 for (;;) 造成當(dāng)前線程阻塞,直到 call 方法執(zhí)行結(jié)束可以獲取到 outcome 的值,并將 outcome 作為 get() 方法返回值。

4.整體的關(guān)系

Thread 和 FutureTask 類(lèi)均實(shí)現(xiàn)了 Runnable 接口并重寫(xiě)了其 run 方法,Thread 將 FutureTask 進(jìn)行聚合賦給 private Runnable target。

5.涉及到的核心源碼(只提取了關(guān)鍵代碼)

5.1 Callable

@FunctionalInterface
public interface Callable<V> {/*** Computes a result, or throws an exception if unable to do so.** @return computed result* @throws Exception if unable to compute a result*/V call() throws Exception;
}

5.2 RunnableFuture

public interface RunnableFuture<V> extends Runnable, Future<V> {/*** Sets this Future to the result of its computation* unless it has been cancelled.*/void run();
}

5.3 FutureTask

public class FutureTask<V> implements RunnableFuture<V> {/** The underlying callable; nulled out after running */private Callable<V> callable;// 存儲(chǔ) callable 接口的 call 方法的返回值/** The result to return or exception to throw from get() */private Object outcome; // non-volatile, protected by state reads/writes/*() -> {log.debug("running");Thread.sleep(1000);return 200;}這實(shí)際上是對(duì)函數(shù)式接口 callable 的 V call() 方法進(jìn)行實(shí)現(xiàn)*/public FutureTask(Callable<V> callable) {if (callable == null)throw new NullPointerException();this.callable = callable;this.state = NEW;       // ensure visibility of callable}   public void run() {// ...Callable<V> c = callable;// 重寫(xiě)了 Runnable 函數(shù)式接口的 run 方法result = c.call();// ...// 賦值set(result);// ...}protected void set(V v) {if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) {// 將 callable 的 call 方法返回值,即我們自定義的 200 賦給 outcomeoutcome = v;UNSAFE.putOrderedInt(this, stateOffset, NORMAL); // final statefinishCompletion();}}// 獲取 callable 的 call 方法的返回結(jié)果public V get() throws InterruptedException, ExecutionException {int s = state;if (s <= COMPLETING)// 獲取到結(jié)果成功的標(biāo)識(shí),實(shí)際是在 awaitDone 方法中用了死循環(huán)不斷判斷是否生成返回結(jié)果,造成了線程阻塞s = awaitDone(false, 0L);// 獲取結(jié)果return report(s);}// timed-是否計(jì)時(shí)等待,即是否設(shè)置等待超時(shí),false表示不設(shè)置,true表示設(shè)置private int awaitDone(boolean timed, long nanos)throws InterruptedException {final long deadline = timed ? System.nanoTime() + nanos : 0L;WaitNode q = null;boolean queued = false;// 死循環(huán)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) // cannot time out yetThread.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);}}
}

5.4 Thread

public class Thread implements Runnable {/* What will be run. */private Runnable target;// 構(gòu)造器,將間接實(shí)現(xiàn)了 Runnable 接口的 FutureTask 對(duì)象傳進(jìn)來(lái)public Thread(Runnable target) {init(null, target, "Thread-" + nextThreadNum(), 0);}private void init(ThreadGroup g, Runnable target, String name, long stackSize) {init(g, target, name, stackSize, null, true);}private void init(ThreadGroup g, Runnable target, String name,long stackSize, AccessControlContext acc,boolean inheritThreadLocals) {// ...// 將 FutureTask 對(duì)象賦給 Thread 對(duì)象的屬性 targetthis.target = target;}@Overridepublic void run() {if (target != null) {// 實(shí)際調(diào)用的 FutureTask 對(duì)象重寫(xiě)的 run 方法,重寫(xiě)的 run 方法中又會(huì)調(diào)用 callable 接口的 call 方法,并將 call 方法的返回值賦給 FutureTask 對(duì)象的屬性 outcometarget.run();}}
}
http://www.risenshineclean.com/news/52874.html

相關(guān)文章:

  • 怎么樣創(chuàng)辦一個(gè)網(wǎng)站如何在國(guó)外推廣自己的網(wǎng)站
  • 專(zhuān)業(yè)酒店設(shè)計(jì)網(wǎng)站建設(shè)廣州網(wǎng)站快速排名
  • 騙子為啥使用香港服務(wù)器seo網(wǎng)站管理
  • dw班級(jí)網(wǎng)站建設(shè)全國(guó)疫情最新情況公布
  • jsp網(wǎng)站開(kāi)發(fā)實(shí)例精講seo外包方案
  • 網(wǎng)站空間 php程序谷歌瀏覽器下載手機(jī)版中文
  • 網(wǎng)站制作價(jià)格 上海百度網(wǎng)頁(yè)推廣怎么做
  • poco攝影網(wǎng)win10優(yōu)化大師官網(wǎng)
  • 撤銷(xiāo)網(wǎng)站備案企業(yè)qq手機(jī)版
  • 做時(shí)時(shí)彩網(wǎng)站平臺(tái)有哪些淘寶指數(shù)查詢工具
  • 建筑模板尺寸關(guān)鍵詞優(yōu)化營(yíng)銷(xiāo)
  • 怎么樣建設(shè)一個(gè)網(wǎng)站關(guān)鍵詞排名優(yōu)化報(bào)價(jià)
  • 從化網(wǎng)站建設(shè)適合網(wǎng)絡(luò)營(yíng)銷(xiāo)的產(chǎn)品
  • 佛山免費(fèi)建站找哪家廣告推廣公司
  • 西安西郊網(wǎng)站建設(shè)搜什么關(guān)鍵詞你都懂的
  • ??诰W(wǎng)站運(yùn)營(yíng)托管費(fèi)用windows優(yōu)化大師官方免費(fèi)
  • 用服務(wù)器做網(wǎng)站空間關(guān)鍵詞排名優(yōu)化軟件
  • 網(wǎng)站備案后要做什么刷seo快速排名
  • 中國(guó)建設(shè)網(wǎng) 中國(guó)建設(shè)網(wǎng)杭州網(wǎng)站seo外包
  • 網(wǎng)站開(kāi)發(fā)建設(shè)方案的主要內(nèi)容包括太原推廣團(tuán)隊(duì)
  • 金融行業(yè)網(wǎng)站建設(shè)友情鏈接平臺(tái)
  • 網(wǎng)站建設(shè)案例圖片做銷(xiāo)售最掙錢(qián)的10個(gè)行業(yè)
  • 布吉商城網(wǎng)站建設(shè)泰州網(wǎng)站建設(shè)優(yōu)化
  • 瑞安做網(wǎng)站多少錢(qián)新聞?lì)^條最新消息
  • 自己做pc網(wǎng)站建設(shè)長(zhǎng)春seo整站優(yōu)化
  • 設(shè)計(jì)做兼職最好的網(wǎng)站如何優(yōu)化搜索引擎
  • 登錄中國(guó)沈陽(yáng)網(wǎng)站重慶seo搜索引擎優(yōu)化優(yōu)與略
  • 珠海建設(shè)網(wǎng)站公司熊貓關(guān)鍵詞挖掘工具
  • 子域名做微信開(kāi)放平臺(tái)網(wǎng)站應(yīng)用自助友鏈平臺(tái)
  • 懷化seo推廣國(guó)內(nèi)好的seo