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

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

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

Executor框架類圖

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

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

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

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


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

網(wǎng)友評論