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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

future java 原理_Java线程池FutureTask实现原理详解

發布時間:2025/3/15 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 future java 原理_Java线程池FutureTask实现原理详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

線程池可以并發執行多個任務,有些時候,我們可能想要跟蹤任務的執行結果,甚至在一定時間內,如果任務沒有執行完成,我們可能還想要取消任務的執行,為了支持這一特性,ThreadPoolExecutor提供了 FutureTask 用于追蹤任務的執行和取消。本篇介紹FutureTask的實現原理。

類視圖

為了更好的理解FutureTask的實現原理,這里先提供幾個重要接口和類的結構,如下圖所示:

RunnableAdapter

ThreadPoolExecutor提供了submit接口用于提交任務,submit支持Runnable和Callable兩種不同的接口,為了提供統一的對外接口,jdk在內部把Runnable給包裝成了一個Callable,這一切是通過RunnableAdapter這個適配器來實現的。如下為RunnableAdapter的源碼:

static final class RunnableAdapter implements Callable {

final Runnable task;

final T result;

RunnableAdapter(Runnable task, T result) {

this.task = task;

this.result = result;

}

public T call() {

task.run();

return result;

}

}

RunnableAdapter是Callable 的實現類,實現了call方法,而call方法僅僅是調用task.run(),然后return result,這樣就能夠確保在內部只需要統一處理Callable接口。

FutureTask實現原理

通過上一小節的了解,我們知道提交的Runnable任務在內部統一被轉換為Callable任務。查看submit方法的返回值,為一個Future,實際上這個Futrue為FutureTask實例,通過此實例,調用get方法,可以阻塞當前線程,直到任務運行完畢,返回結果。

整個調用鏈條如下所示:

worker thread -> futureTask.run() -> callable.call() -> task.run()

如果提交的是Callable任務,則只有前面三個調用。

為了更好的展示整個流程,下面舉例演示一遍執行流程。

1、 向線程池submit一個Callable任務(Runnable也會被轉為Callable), 這時候Callable被傳入一個FutureTask實例中,如下所示:

2、線程池使用一個線程,執行這個 FutureTask 任務,

線程執行任務過程比較簡單,最終會調用Callable.call()或者是 Runnable.run()方法,然后得到一個結果,把結果存儲在FutureTask實例的outcome屬性中,同時把狀態修改為NORMAL,表明任務已經執行完畢,可以獲取結果了。

我們假設在執行 callable.call()過程中有多個線程調用了 同個FutureTask實例的get方法,這時候,這些線程會被阻塞,存于一個棧中, 如下圖所示:

線程1,2,3調用FutureTask.get方法,由于任務未執行結束,這時候,三個線程都將被阻塞休眠,FutureTask中有一個棧,用于存放等待線程,棧頂指針為 FutureTask.waiters引用,當任務執行完畢后,會迭代喚醒整個棧中的線程,這時候,各個線程都將被喚醒,并且可以順利拿到任務的執行結果(執行結果存于 FutureTask.outcome)。

FutureTask還支持任務的取消功能,這一切都是通過 FutureTask的state狀態來協調多個線程的。

總結

FutureTask接口是一種實現機制,提供我們對任務的執行的跟蹤以及控制,相比于線程池本身,比較簡單,相信不難理解。

以上就是本文關于Java線程池FutureTask實現原理詳解的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

總結

以上是生活随笔為你收集整理的future java 原理_Java线程池FutureTask实现原理详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 加勒比成人av | 久久国产传媒 | 欧美成人性生活片 | 午夜久久一区 | 青青草国产精品 | 男裸体无遮挡网站 | 一级黄色毛毛片 | 天天摸天天舔天天操 | 日韩精品色呦呦 | 亚洲福利视频网 | 激情网页 | 日本www视频在线观看 | 亚洲啪啪网址 | 日本不卡一区在线 | 成人精品一区日本无码网 | 成人免费观看a | 少妇人妻一区二区 | 欧美黑人xxxⅹ高潮交 | 天天插插 | 日韩精品在线一区二区 | 欧美黑吊大战白妞欧美大片 | 涩涩视频免费观看 | 午夜综合 | 午夜理伦三级做爰电影 | 国产亚洲黄色片 | 粉色视频免费观看 | 精品久久在线观看 | 美女黄页网站 | 婷婷视频在线 | 希岛婚前侵犯中文字幕在线 | 欧美大片免费在线观看 | 黄色av在| 69精品人人人人 | 咪咪色图 | 蜜臀尤物一区二区三区直播 | 婷婷6月天| 午夜香蕉网 | 国产免费一区二区三区在线观看 | 不卡一区在线 | 成人激情电影在线观看 | 免费又黄又爽又猛大片午夜 | 欧美一级录像 | 午夜家庭影院 | 国产成人综合一区二区三区 | 91在线观看喷潮 | 毛片入口 | 国产一区二区精品在线观看 | 欧美亚洲精品在线 | 99久久精品一区二区 | 欧美亚洲图片小说 | www.97ai.com | 亚洲黄色在线免费观看 | 欧美大片在线免费观看 | 少妇av | 成人777| 久草视频2| 日韩美女激情视频 | 免费在线色视频 | 又色又爽又黄18网站 | 中文日韩字幕 | 国产日韩欧美在线观看视频 | 驯服少爷漫画免费观看下拉式漫画 | 国产精品女优 | 日韩欧美99 | 一个色av| 欧美激情久久久 | 美女网站av | 国产美女主播在线观看 | 日韩一区二区三区在线 | 亚洲视频在线免费观看 | 91免费精品视频 | www久久久com| 蜜桃av一区二区三区 | 国产在线久久久 | 亚洲成人mv | 日本高清视频www夜色资源 | 日本少妇色视频 | 脱美女衣服亲摸揉视频 | 国产精品久久久久久久久免费软件 | 久久精品色欲国产AV一区二区 | 色婷婷综合久久久中文字幕 | 欧美日韩aa| 91视频免费看片 | 国产黄色av网站 | 91国产一区 | 国产激情在线 | 亚洲av区无码字幕中文色 | 国产大学生视频 | 女生的胸无遮挡 | 美女张开腿让人桶 | 你懂的国产视频 | 欧美日韩国产精品成人 | 国产精品视频一区二区三区不卡 | 在线免费观看av的网站 | www.黄在线 | 综合久久综合久久 | 久久99久久99精品中文字幕 | 99久视频| 欧美性受xxx |