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ì)示意圖