Executor框架的兩級調(diào)度模型

在HotSpot VM的模型中,JAVA線程被一對一映射為本地操作系統(tǒng)線程。JAVA線程啟動時會創(chuàng)建一個本地操作系統(tǒng)線程,當(dāng)JAVA線程終止時,對應(yīng)的操作系統(tǒng)線程也被銷毀回收,而操作系統(tǒng)會調(diào)度所有線程并將它們分配給可用的CPU。

在上層,JAVA程序會將應(yīng)用分解為多個任務(wù),然后使用應(yīng)用級的調(diào)度器(Executor)將這些任務(wù)映射成固定數(shù)量的線程;在底層,操作系統(tǒng)內(nèi)核將這些線程映射到硬件處理器上。

Executor框架類圖

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

在前面介紹的JAVA線程既是工作單元,也是執(zhí)行機(jī)制。而在Executor框架中,我們將工作單元與執(zhí)行機(jī)制分離開來。Runnable和Callable是工作單元(也就是俗稱的任務(wù)),而執(zhí)行機(jī)制由Executor來提供。這樣一來Executor是基于生產(chǎn)者消費者模式的,提交任務(wù)的操作相當(dāng)于生成者,執(zhí)行任務(wù)的線程相當(dāng)于消費者。

1、從類圖上看,Executor接口是異步任務(wù)執(zhí)行框架的基礎(chǔ),該框架能夠支持多種不同類型的任務(wù)執(zhí)行策略。

public interface Executor {    void execute(Runnable command);
}

Executor接口就提供了一個執(zhí)行方法,任務(wù)是Runnbale類型,不支持Callable類型。


2、ExecutorService接口實現(xiàn)了Executor接口,主要提供了關(guān)閉線程池和submit方法:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

public interface ExecutorService extends Executor {

    List<Runnable> shutdownNow();    boolean isTerminated();    <T> Future<T> submit(Callable<T> task);

 }

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式