成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

初讀《Java并發(fā)編程的藝術(shù)》-第十章:Executor框架 -10.1 Executor框架簡介

aisuhua / 2479人閱讀

摘要:線程的啟動(dòng)與銷毀都與本地線程同步。操作系統(tǒng)會(huì)調(diào)度所有線程并將它們分配給可用的??蚣艿某蓡T主要成員線程池接口接口接口以及工具類。創(chuàng)建單個(gè)線程的接口與其實(shí)現(xiàn)類用于表示異步計(jì)算的結(jié)果。參考書籍并發(fā)編程的藝術(shù)方騰飛魏鵬程曉明著

在java中,直接使用線程來異步的執(zhí)行任務(wù),線程的每次創(chuàng)建與銷毀需要一定的計(jì)算機(jī)資源開銷。每個(gè)任務(wù)創(chuàng)建一個(gè)線程的話,當(dāng)任務(wù)數(shù)量多的時(shí)候,則對(duì)應(yīng)的創(chuàng)建銷毀開銷會(huì)消耗大量的資源,這種策略最終可能會(huì)使處于高負(fù)荷狀態(tài)的應(yīng)用崩潰。

Java中的線程,即使工作單元,也是執(zhí)行機(jī)制。從JDK5開始,把工作單元與執(zhí)行機(jī)制分離開來。

工作單元:Runnable 和 Callable

執(zhí)行機(jī)制:Executor 框架

1. Executor 框架簡介 1.1 Executor 框架的兩級(jí)調(diào)度模型

在HotSpot VM 的線程模型中,Java線程(java.lang.Thread) 被一對(duì)一的映射為本地操作系統(tǒng)的線程。Java線程的啟動(dòng)與銷毀都與本地線程同步。操作系統(tǒng)會(huì)調(diào)度所有線程并將它們分配給可用的CPU。

在上層,Java使用多線程的程序,通常會(huì)將應(yīng)用分解為若干任務(wù),然后使用用戶級(jí)別的調(diào)度器(Executor框架)將這些任務(wù)映射為對(duì)應(yīng)數(shù)量的線程;

底層,操作系統(tǒng)會(huì)將這些線程映射到硬件處理器上,切下層硬件的調(diào)度并不受應(yīng)用程序的控制。調(diào)度模型如下圖

1.2 Executor框架的結(jié)構(gòu)與成員 1. Excutor 框架的結(jié)構(gòu) -主要由3大部分組成

任務(wù)

Runnable接口(無返回值)

Callable接口(有返回值)

任務(wù)的執(zhí)行
執(zhí)行機(jī)制的核心接口-Executor,以及實(shí)現(xiàn)Executor接口的ExecutorService,
Executor框架 中有兩個(gè)關(guān)鍵類實(shí)現(xiàn)了ExecutorService:

ThreadPoolExecutor

線程池的實(shí)現(xiàn)類,執(zhí)行被提交的線程、任務(wù)(Callable/Runnable 接口的實(shí)現(xiàn)類中的run()方法)

ScheduledThreadPoolExecutor

給定延遲或定期的執(zhí)行任務(wù)(Callable/Runnable 接口的實(shí)現(xiàn)類中的run()方法)、命令。比Timer 更加靈活,強(qiáng)大。

異步執(zhí)行的結(jié)果(返回值)

Future 接口 可以通過get()方法或者異步執(zhí)行的結(jié)果

FutureTask類 (實(shí)現(xiàn)了Future接口)

Executor框架的使用:

主線程(main線程)創(chuàng)建實(shí)現(xiàn)Runnable或者Callable 接口的待執(zhí)行任務(wù)對(duì)象。

Executors可以將Runnable封裝為Callable {Executors.callable(Runnable task)/(Runnable task,result)}。

Runnable接口對(duì)象可以交由ExexutorService執(zhí)行 {ExecutorService.executor(Runnable r) {無返回值};或者把Runnable接口對(duì)象或Callable接口對(duì)象交由ExecutorService執(zhí)行 {ExecutorService.submit(Runnable r/Callable t) 有返回值 Futrue接口的對(duì)象,現(xiàn)階段JDK返回的是FutureTask};

最后,主線程(main線程)執(zhí)行 FutrueTask.get()阻塞,等待任務(wù)執(zhí)行完成,同時(shí)獲取返回值。也可以執(zhí)行FutureTask.cancel(boolean mayInterruptIfRunning)取消執(zhí)行(參數(shù)表示如果正在執(zhí)行是否取消)。

2. Executor框架的成員
主要成員: ThreadPoolExecutor(線程池)、ScheduldThreadPoolExecutor、Runnable接口、Future接口、Callable接口 以及 Executors工具類。

ThreadPoolExecutor
通常使用Executors 創(chuàng)建,Executors可以創(chuàng)建三種類型的ThreadPoolExecutor:SingleThreadExecuto、FixedThreadPool、CachedThreadPool

FixedThreadPool 創(chuàng)建固定線程數(shù),適用于限制當(dāng)前線程數(shù)量時(shí),適用于負(fù)載較重的服務(wù)器。
Executor創(chuàng)建使用的API:

public static ExecutorService newFixedThreadPool(int nThreads);
public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory);

SingleThreadExecutor 創(chuàng)建單個(gè)線程,任意時(shí)間點(diǎn)不會(huì)有多個(gè)線程是活動(dòng)的,適用于需要保證順序執(zhí)行各任務(wù)的時(shí)候。
Executors創(chuàng)建API:

public static ExecutorService newSingleThreadPool();
public static ExecutorService newSingleThreadPool(ThreadFactory threadFactory);

CachedThreadPool 根據(jù)需要?jiǎng)?chuàng)建新線程,大小無界的線程池,適用于執(zhí)行大量短期的異步任務(wù)時(shí),或負(fù)載較輕的服務(wù)器。
Executors創(chuàng)建API:

public static ExecutorService newCachedThreadPool();
public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory);

ScheduledThreadPoolExecutor
使用Executors工廠類創(chuàng)建,Executors可以創(chuàng)建兩種類型的ScheduldThreadPoolExecutor

ScheduledThreadPoolExecutor 包含若干個(gè)線程,適用于多個(gè)線程執(zhí)行周期任務(wù),同時(shí)限制執(zhí)行的線程數(shù)量。
Executors 創(chuàng)建固定個(gè)數(shù)線程ScheduledThreadPoolExecutor 的API:

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize);
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory);

SingleThreadScheduledExecutor 之包含一個(gè)線程,適用于單個(gè)后臺(tái)線程執(zhí)行定時(shí)任務(wù),同時(shí)保證順序執(zhí)行各個(gè)任務(wù)。
Executors 創(chuàng)建單個(gè)線程SingleScheduledExecutor 的API:

public static ScheduledExecutorService newSingleScheduledExecutor(int corePoolSize);
public static ScheduledExecutorService newSingleScheduledExecutor(int corePoolSize, ThreadFactory threadFactory);

Future 接口
與其實(shí)現(xiàn)類FutureTask用于表示異步計(jì)算的結(jié)果。Runnable/Callable接口提交(submit)給ThreadPoolExecutor或者ScheduledThreadPoolExecutor時(shí)候,返回值為FutureTask對(duì)象、實(shí)現(xiàn)類Future接口的對(duì)象。

 Future submit(Callable task);
 Future submit(Runnable task, T result);
Future submit(Runnable task);

Runnable 和Callable 接口
都可以被線程池執(zhí)行,Runnable 無返回值,Callable 有返回值。
Runnable可以使用工廠類Executors將其封裝為Callble
Executors 對(duì)應(yīng)API如下:

//將返回的Callable對(duì)象提交給線程池返回FutureTask對(duì)象,調(diào)用FutureTask.get(),返回null
public static Callable callable(Runnable task);

//同上提交,F(xiàn)utureTask.get(),返回result對(duì)象。
public static Callable callable(Runnable task, T result);
    

參考書籍

《Java并發(fā)編程的藝術(shù)》 -方騰飛 魏鵬 程曉明 著

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74446.html

相關(guān)文章

  • Java多線程學(xué)習(xí)(八)線程池與Executor 框架

    摘要:一使用線程池的好處線程池提供了一種限制和管理資源包括執(zhí)行一個(gè)任務(wù)。每個(gè)線程池還維護(hù)一些基本統(tǒng)計(jì)信息,例如已完成任務(wù)的數(shù)量。通過重復(fù)利用已創(chuàng)建的線程降低線程創(chuàng)建和銷毀造成的消耗。使用無界隊(duì)列作為線程池的工作隊(duì)列會(huì)對(duì)線程池帶來的影響與相同。 歷史優(yōu)質(zhì)文章推薦: Java并發(fā)編程指南專欄 分布式系統(tǒng)的經(jīng)典基礎(chǔ)理論 可能是最漂亮的Spring事務(wù)管理詳解 面試中關(guān)于Java虛擬機(jī)(jvm)的問...

    cheng10 評(píng)論0 收藏0
  • Java并發(fā)

    摘要:對(duì)象改變條件對(duì)象當(dāng)前線程要等待線程終止之后才能從返回。如果線程在上的操作中被中斷,通道會(huì)被關(guān)閉,線程的中斷狀態(tài)會(huì)被設(shè)置,并得到一個(gè)。清除線程的中斷狀態(tài)。非公平性鎖雖然可能造成饑餓,但極少的線程切換,保證其更大的吞吐量。 聲明:Java并發(fā)的內(nèi)容是自己閱讀《Java并發(fā)編程實(shí)戰(zhàn)》和《Java并發(fā)編程的藝術(shù)》整理來的。 showImg(https://segmentfault.com/im...

    SKYZACK 評(píng)論0 收藏0
  • java并發(fā)系列 - 19天:JUC中Executor框架詳解1,全面掌握java并發(fā)相關(guān)技術(shù)

    摘要:有三種狀態(tài)運(yùn)行關(guān)閉終止。類類,提供了一系列工廠方法用于創(chuàng)建線程池,返回的線程池都實(shí)現(xiàn)了接口。線程池的大小一旦達(dá)到最大值就會(huì)保持不變,在提交新任務(wù),任務(wù)將會(huì)進(jìn)入等待隊(duì)列中等待。此線程池支持定時(shí)以及周期性執(zhí)行任務(wù)的需求。 這是java高并發(fā)系列第19篇文章。 本文主要內(nèi)容 介紹Executor框架相關(guān)內(nèi)容 介紹Executor 介紹ExecutorService 介紹線程池ThreadP...

    icattlecoder 評(píng)論0 收藏0
  • ForkJoin框架之CompletableFuture

    摘要:內(nèi)部類,用于對(duì)和異常進(jìn)行包裝,從而保證對(duì)進(jìn)行只有一次成功。是取消異常,轉(zhuǎn)換后拋出。判斷是否使用的線程池,在中持有該線程池的引用。 前言 近期作者對(duì)響應(yīng)式編程越發(fā)感興趣,在內(nèi)部分享JAVA9-12新特性過程中,有兩處特性讓作者深感興趣:1.JAVA9中的JEP266對(duì)并發(fā)編程工具的更新,包含發(fā)布訂閱框架Flow和CompletableFuture加強(qiáng),其中發(fā)布訂閱框架以java.base...

    lindroid 評(píng)論0 收藏0
  • java并發(fā)系列 - 20天:JUC中Executor框架詳解2

    摘要:示例執(zhí)行一批任務(wù),然后消費(fèi)執(zhí)行結(jié)果代碼如下跟著阿里學(xué)并發(fā),微信公眾號(hào)輸出代碼中傳入了一批任務(wù)進(jìn)行處理,最終將所有處理完成的按任務(wù)完成的先后順序傳遞給進(jìn)行消費(fèi)了。 這是java高并發(fā)系列第20篇文章。 本文內(nèi)容 ExecutorCompletionService出現(xiàn)的背景 介紹CompletionService接口及常用的方法 介紹ExecutorCompletionService類及...

    msup 評(píng)論0 收藏0
  • 原理剖析( 010 篇)Netty之服務(wù)端啟動(dòng)工作原理分析(上)

    摘要:端引導(dǎo)類線程管理組線程管理組將設(shè)置到服務(wù)端引導(dǎo)類中指定通道類型為,一種異步模式,阻塞模式為設(shè)置讓服務(wù)器監(jiān)聽某個(gè)端口已等待客戶端連接。 原理剖析(第 010 篇)Netty之服務(wù)端啟動(dòng)工作原理分析(上) - 一、大致介紹 1、Netty這個(gè)詞,對(duì)于熟悉并發(fā)的童鞋一點(diǎn)都不陌生,它是一個(gè)異步事件驅(qū)動(dòng)型的網(wǎng)絡(luò)通信框架; 2、使用Netty不需要我們關(guān)注過多NIO的API操作,簡簡單單的使用即可...

    coordinate35 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<