摘要:線程池的類體系結(jié)構(gòu)架構(gòu)首先明確一定是在里面可以供使用者調(diào)用的啟動(dòng)線程類是。解決了向線程池提交任務(wù)的入口問(wèn)題,同時(shí)解決了如何進(jìn)行重復(fù)調(diào)用任務(wù)的問(wèn)題。配置一個(gè)合適的線程池是很復(fù)雜的,因此默認(rèn)的一些線程池配置可以減少這個(gè)操作。
線程池的類體系結(jié)構(gòu)
JAVA API 架構(gòu)
首先明確一定是在Java里面可以供使用者調(diào)用的啟動(dòng)線程類是Thread。因此Runnable或者Timer/TimerTask等都是要依賴Thread來(lái)啟動(dòng)的,因此在ThreadPool里面同樣也是靠Thread來(lái)啟動(dòng)多線程的。
默認(rèn)情況下Runnable接口執(zhí)行完畢后是不能拿到執(zhí)行結(jié)果的,因此在ThreadPool里就定義了一個(gè)Callable接口來(lái)處理執(zhí)行結(jié)果。
為了異步阻塞的獲取結(jié)果,F(xiàn)uture可以幫助調(diào)用線程獲取執(zhí)行結(jié)果。
Executor解決了向線程池提交任務(wù)的入口問(wèn)題,同時(shí)ScheduledExecutorService解決了如何進(jìn)行重復(fù)調(diào)用任務(wù)的問(wèn)題。
CompletionService解決了如何按照?qǐng)?zhí)行完畢的順序獲取結(jié)果的問(wèn)題,這在某些情況下可以提高任務(wù)執(zhí)行的并發(fā),調(diào)用線程不必在長(zhǎng)時(shí)間任務(wù)上等待過(guò)多時(shí)間。
顯然線程的數(shù)量是有限的,而且也不宜過(guò)多,因此合適的任務(wù)隊(duì)列是必不可少的,BlockingQueue的容量正好可以解決此問(wèn)題。
固定任務(wù)容量就意味著在容量滿了以后需要一定的策略來(lái)處理過(guò)多的任務(wù)(新任務(wù)),RejectedExecutionHandler正好解決此問(wèn)題。
一定時(shí)間內(nèi)阻塞就意味著有超時(shí),因此TimeoutException就是為了描述這種現(xiàn)象。TimeUnit是為了描述超時(shí)時(shí)間方便的一個(gè)時(shí)間單元枚舉類。
配置一個(gè)合適的線程池是很復(fù)雜的,因此Executors默認(rèn)的一些線程池配置可以減少這個(gè)操作。
小福利:知乎上回答的關(guān)于并發(fā)的書籍和博客 點(diǎn)擊查看
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/69836.html
摘要:多線程同步工具箱之篇前言的多線程協(xié)調(diào)工具,,,都是在多線程代碼中使用比較多的工具類之一。毫不夸張的說(shuō),這幾個(gè)類,是等同于解決多線程問(wèn)的包,實(shí)在有必要添加到程序員的工具箱里面。 Java多線程同步工具箱之CountDownLatch篇 前言 Java的多線程協(xié)調(diào)工具CountDownLatch,Semaphore,CyclicBarrier,ReadWriteLock都是在多線程代碼中使...
摘要:直接對(duì)棧的操作只有兩個(gè),就是對(duì)棧幀的壓棧和出棧。中將永久代移除,同時(shí)增加元數(shù)據(jù)區(qū)。在中,本地方法棧和虛擬機(jī)棧是在同一塊兒區(qū)域,這完全取決于技術(shù)實(shí)現(xiàn)的決定,并未在規(guī)范中強(qiáng)制。 原文:https://github.com/linsheng97... 描述一下 JVM 的內(nèi)存區(qū)域 程序計(jì)數(shù)?(PC,Program Counter Register)。在 JVM 規(guī)范中,每個(gè)線程都有它自己的...
摘要:中的詳解必修個(gè)多線程問(wèn)題總結(jié)個(gè)多線程問(wèn)題總結(jié)有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升開(kāi)源的運(yùn)行原理從虛擬機(jī)工作流程看運(yùn)行原理。 自己實(shí)現(xiàn)集合框架 (三): 單鏈表的實(shí)現(xiàn) 自己實(shí)現(xiàn)集合框架 (三): 單鏈表的實(shí)現(xiàn) 基于 POI 封裝 ExcelUtil 精簡(jiǎn)的 Excel 導(dǎo)入導(dǎo)出 由于 poi 本身只是針對(duì)于 ...
摘要:堆區(qū)堆是虛擬機(jī)所管理的內(nèi)存中最大的一塊,它是被所有線程共享的一塊內(nèi)存區(qū)域,該區(qū)域在虛擬機(jī)啟動(dòng)的時(shí)候創(chuàng)建。 運(yùn)行時(shí)數(shù)據(jù)區(qū)域 ? ?想要了解jvm,那對(duì)其內(nèi)存分配管理的學(xué)習(xí)是必不可少的;java虛擬機(jī)在執(zhí)行java程序的時(shí)候會(huì)把它所管理的內(nèi)存劃分成若干數(shù)據(jù)區(qū)域。這些區(qū)域有著不同的功能、用途、創(chuàng)建/銷毀時(shí)間。java虛擬機(jī)所分配管理的內(nèi)存區(qū)域如圖1所示 程序計(jì)數(shù)器 ? ?程序計(jì)數(shù)器是一塊比較...
摘要:目錄源碼之下無(wú)秘密做最好的源碼分析教程源碼分析之番外篇的前生今世的前生今世之一簡(jiǎn)介的前生今世之二小結(jié)的前生今世之三詳解的前生今世之四詳解源碼分析之零磨刀不誤砍柴工源碼分析環(huán)境搭建源碼分析之一揭開(kāi)神秘的紅蓋頭源碼分析之一揭開(kāi)神秘的紅蓋頭客戶端 目錄 源碼之下無(wú)秘密 ── 做最好的 Netty 源碼分析教程 Netty 源碼分析之 番外篇 Java NIO 的前生今世 Java NI...
閱讀 1523·2021-09-22 15:35
閱讀 2006·2021-09-14 18:04
閱讀 877·2019-08-30 15:55
閱讀 2449·2019-08-30 15:53
閱讀 2680·2019-08-30 12:45
閱讀 1203·2019-08-29 17:01
閱讀 2577·2019-08-29 15:30
閱讀 3514·2019-08-29 15:09