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