Executor框架的兩級(jí)調(diào)度模型
在HotSpot VM的模型中,JAVA線程被一對(duì)一映射為本地操作系統(tǒng)線程。JAVA線程啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè)本地操作系統(tǒng)線程,當(dāng)JAVA線程終止時(shí),對(duì)應(yīng)的操作系統(tǒng)線程也被銷毀回收,而操作系統(tǒng)會(huì)調(diào)度所有線程并將它們分配給可用的CPU。
在上層,JAVA程序會(huì)將應(yīng)用分解為多個(gè)任務(wù),然后使用應(yīng)用級(jí)的調(diào)度器(Executor)將這些任務(wù)映射成固定數(shù)量的線程;在底層,操作系統(tǒng)內(nèi)核將這些線程映射到硬件處理器上。
Executor框架類圖
在前面介紹的JAVA線程既是工作單元,也是執(zhí)行機(jī)制。而在Executor框架中,我們將工作單元與執(zhí)行機(jī)制分離開來(lái)。Runnable和Callable是工作單元(也就是俗稱的任務(wù)),而執(zhí)行機(jī)制由Executor來(lái)提供。這樣一來(lái)Executor是基于生產(chǎn)者消費(fèi)者模式的,提交任務(wù)的操作相當(dāng)于生成者,執(zhí)行任務(wù)的線程相當(dāng)于消費(fèi)者。
1、從類圖上看,Executor接口是異步任務(wù)執(zhí)行框架的基礎(chǔ),該框架能夠支持多種不同類型的任務(wù)執(zhí)行策略。
public interface Executor { void execute(Runnable command); }
Executor接口就提供了一個(gè)執(zhí)行方法,任務(wù)是Runnbale類型,不支持Callable類型。
2、ExecutorService接口實(shí)現(xiàn)了Executor接口,主要提供了關(guān)閉線程池和submit方法:
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26