第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Executor 并發(fā)框架介紹

1. 前言

從本節(jié)開始,我們學習新一章內容 —— 并發(fā)框架。

本章總共介紹兩類并發(fā)框架,本節(jié)帶領大家認識第一個并發(fā)框架之 Executor。

本節(jié)先介紹 Executor 并發(fā)框架的整個體系結構,接著介紹各部分中的核心接口和實現(xiàn)類,下一節(jié)中使用 Executor 并發(fā)框架實現(xiàn)一個綜合例子,讓大家從整體概念、接口實現(xiàn)、應用有一個較全面的了解。

下面我們正式開始介紹吧。

2. 整體結構介紹

從 JDK 1.5 開始,java 中將工作單元和執(zhí)行機制做了分離,于是 Executor 并行框架出現(xiàn)。

什么是工作單元(或稱為任務)呢?其實就是我們需要運行的一段邏輯代碼。不管什么邏輯的工作單元,最終都需要通過線程運行。

Executor 并行框架對工作單元、以及工作單元的執(zhí)行做了高度抽象,形成了一整套完整模型。這個模型包括 3 大部分:

  1. 對工作單元的抽象,即任務。
  2. 任務的執(zhí)行機制,即如何組織任務的提交、如何管理提交的任務、如何組織多個線程執(zhí)行。
  3. 對任務執(zhí)行結果的抽象,即如何跟蹤任務執(zhí)行狀態(tài),如何獲取任務執(zhí)行結果。

整體結構已經(jīng)了解了,接著我們繼續(xù)了解各部分的核心接口和實現(xiàn)類。

3. 核心接口和實現(xiàn)類

整個 Executor 框架的核心接口和實現(xiàn)類型如下:

  1. 工作單元:Runnable,Callable
  2. 工作單元執(zhí)行:Executor,ExecutorService
  3. 工作單元執(zhí)行結果:Future,F(xiàn)utureTask

Executor 框架核心接口的使用邏輯如下圖:
圖片描述
下面,我們繼續(xù)深入了解各接口和實現(xiàn)類的基本知識。

3.1. Runnable & Callable

當不需要關注任務執(zhí)行結果時,使用 Runnable 很合適,反之使用 Callable。代碼舉例:

Runnable task = new Runnable() {
	public void run() {
		// 任何想要執(zhí)行的邏輯
	}
}

Callable<String> task = new Callable<String>() {
    public String call() throws Exception {
        // 任何想要執(zhí)行的邏輯
        return "任務執(zhí)行后任何想返回的信息";
    }
};

3.2. Executor & ExecutorService

Executor 接口定義了一個用于執(zhí)行任務的 execute 方法。ExecutorService 是 Executor 的子接口,其職責是對一堆用于執(zhí)行任務的線程做管理,即定義了線程池的基本操作接口,有很多具體的實現(xiàn)子類,其核心操作有:

  1. execute (Runnable):提交 Runnable 任務。
  2. submit (Callable 或 Runnable):提交 Callable 或 Runnable 任務,并返回代表此任務的 Future 對象。
  3. shutdown ():關閉新的外部任務提交。
  4. shutdownNow ():嘗試中斷正在執(zhí)行的所有任務,清空并返回待執(zhí)行的任務列表。
  5. isTerminated ():測試是否所有任務都執(zhí)行完畢了。
  6. isShutdown ():測試是否該 ExecutorService 已被關閉。

這些核心操作在下一節(jié)示例中會有應用。

3.3. Future & FutureTask

Future 接口定義了對任務執(zhí)行結果的取消、狀態(tài)查詢、結果獲取方法。FutureTask 是 Future 的唯一實現(xiàn)類,其職責是提供方便地構建帶有返回結果的任務。Future 接口的核心操作有:

  1. cancel (boolean):嘗試取消已經(jīng)提交的任務。
  2. isCancelled ():查詢任務是否在完成之前被取消了。
  3. isDone ():查詢任務是否已經(jīng)完成。
  4. get ():獲取異步任務的執(zhí)行結果(如果任務沒執(zhí)行完將等待)。

4. 小結

本節(jié)帶領大家對 Executor 框架做整體認識,熟悉其最基本骨架內容,先做到有整體的概念。具體 Executor 框架如何使用呢,我們在下一節(jié)講述。希望大家在學習過程中,多思考勤練習,早日掌握之。