11:Executor框架

1:Executor框架介紹

java的線程既是工作單元,也是執(zhí)行機(jī)制。JDK1.5后,把工作單元與執(zhí)行機(jī)制分離開(kāi)來(lái)。工作單元包括:Runnable和Callable,而執(zhí)行機(jī)制由Executor框架提供。

三大組成結(jié)構(gòu):

(1)任務(wù):Runnable接口和Callable接口

(2)任務(wù)的執(zhí)行:任務(wù)執(zhí)行機(jī)制核心接口-Executor,繼承自Executor的ExecutorService接口。

比較關(guān)鍵的2個(gè)實(shí)現(xiàn)類:ThreadPoolExecutor和ScheduledThreadPoolExecutor

(3)異步計(jì)算結(jié)果:包括接口-Future,實(shí)現(xiàn)類-FutureTask類。

(4)Executor框架的類和接口示意圖:

(5)Executor框架的使用示意圖

2:Executor框架的成員

(1)ThreadPoolExecutor

通過(guò)Executors工廠來(lái)創(chuàng)建三種:

FixedThreadPool :可重用固定線程數(shù)的線程池。注意它使用無(wú)界隊(duì)列LinkedBlockingQueue作為線程池的工作隊(duì)列。

SingleThreadExecutor:是使用了單個(gè)worker線程的Executor。注意它也是使用無(wú)界隊(duì)列作為線程池的工作隊(duì)列。

CachedThreadPool:是一個(gè)會(huì)根據(jù)需要?jiǎng)?chuàng)建新線程的線程池。

(2)ScheduleThreadPoolExecutor

通過(guò)Executors工廠來(lái)創(chuàng)建二種:

ScheduledThreadPoolExecutor:包含若干個(gè)線程的ScheduleThreadPoolExecutor

SingleThreadScheduledExecutor:只包含一個(gè)線程的ScheduleThreadPoolExecutor

(3)Future接口

注意:Future接口和實(shí)現(xiàn)了Future接口的FutureTask類,用來(lái)表示異步計(jì)算的結(jié)果。

(4)Runnable接口和Callable接口

區(qū)別:大家都可以被ThreadPoolExecutor或ScheduledThreadPoolExecutor執(zhí)行。但是Runnable不會(huì)返回結(jié)果,而Callable可以返回結(jié)果。

3:ThreadPoolExecutor詳解,繼續(xù)補(bǔ)充2中的內(nèi)容即可。

4:ScheduledThreadPoolExecutor繼承自ThreadPoolExecutor。只要用來(lái)在給定延遲之后運(yùn)行任務(wù),或者定期執(zhí)行任務(wù)?!偎伎妓伎?????

(1)說(shuō)一下ScheduledThreadPoolExecutor和Timer的區(qū)別?

TImer對(duì)應(yīng)的是單個(gè)后臺(tái)線程。ScheduledThreadPoolExecutor可以在構(gòu)造函數(shù)中指定多個(gè)對(duì)應(yīng)的后臺(tái)線程數(shù)。

(2)運(yùn)行機(jī)制:

(3)ScheduledThreadPoolExecutor的任務(wù)執(zhí)行步驟

4:FutureTask詳解

Future接口和實(shí)現(xiàn)Future接口的FutureTask類,代表異步計(jì)算的結(jié)果。

(1)FutureTask的get和cancel的執(zhí)行示意圖:

(2)FutureTask的使用

當(dāng)一個(gè)線程需要等待另一個(gè)線程把某個(gè)任務(wù)執(zhí)行完后它才能繼續(xù)執(zhí)行,可以使用FutureTask。

還有:join,CountDownLatch

(3)FutureTask的實(shí)現(xiàn)

原理:基于AbstractQueuedSynchronizer(簡(jiǎn)稱:AQS)。

什么是AQS?

答:AQS是一個(gè)同步框架,它提供通用機(jī)制來(lái)原子性管理同步狀態(tài)、阻塞和喚醒線程,以及維護(hù)被阻塞線程的隊(duì)列。

jdk中的實(shí)現(xiàn)類:ReentrantLock,Semaphore,ReentrantReadWriteLock,CountDownLatch和FutureTask

(4)FutureTask的設(shè)計(jì)示意圖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Executor框架是在Java5中引入的,可以通過(guò)該框架來(lái)控制線程的啟動(dòng),執(zhí)行,關(guān)閉,簡(jiǎn)化并發(fā)編程。Execut...
    加大裝益達(dá)閱讀 3,757評(píng)論 0 3
  • 前言 最近在看并發(fā)編程藝術(shù)這本書(shū),對(duì)看書(shū)的一些筆記及個(gè)人工作中的總結(jié)。 Java的線程既是工作單元,也是執(zhí)行機(jī)制。...
    二月_春風(fēng)閱讀 360評(píng)論 0 0
  • 不懈努力、共創(chuàng)輝煌 為了有效推動(dòng)銀企合作,進(jìn)一步拓展我行客戶群...
    248db5da9ca7閱讀 671評(píng)論 0 0
  • 文/茉莉 人生是一場(chǎng)孤單的旅程,沒(méi)有人能陪你一輩子。 無(wú)論是心比比干多一竅的林黛玉,還是混世魔王賈寶玉,哪個(gè)人不是...
    茉莉讀書(shū)薈閱讀 475評(píng)論 0 1
  • 人生,需要有一些時(shí)刻,慢下來(lái),靜下來(lái),聽(tīng)一聽(tīng)花開(kāi)的聲音,看一看葉子舒卷的曼妙。。。 不要以為你放不下的人同樣會(huì)放不...
    煙雨江南669閱讀 134評(píng)論 0 0