av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java使用線程池的優(yōu)勢(shì)有哪些

瀏覽:68日期:2022-08-25 11:24:47

池化技術(shù)相比大家已經(jīng)屢見(jiàn)不鮮了,線程池、數(shù)據(jù)庫(kù)連接池、Http 連接池等等都是對(duì)這個(gè)思想的應(yīng)用。池化技術(shù)的思想主要是為了減少每次獲取資源的消耗,提高對(duì)資源的利用率。 線程池提供了一種限制和管理資源(包括執(zhí)行一個(gè)任務(wù))。 每個(gè)線程池還維護(hù)一些基本統(tǒng)計(jì)信息,例如已完成任務(wù)的數(shù)量。

這里借用《Java 并發(fā)編程的藝術(shù)》提到的來(lái)說(shuō)一下使用線程池的好處:

降低資源消耗。通過(guò)重復(fù)利用已創(chuàng)建的線程降低線程創(chuàng)建和銷毀造成的消耗。 提高響應(yīng)速度。當(dāng)任務(wù)到達(dá)時(shí),任務(wù)可以不需要的等到線程創(chuàng)建就能立即執(zhí)行。 提高線程的可管理性。線程是稀缺資源,如果無(wú)限制的創(chuàng)建,不僅會(huì)消耗系統(tǒng)資源,還會(huì)降低系統(tǒng)的穩(wěn)定性,使用線程池可以進(jìn)行統(tǒng)一的分配,調(diào)優(yōu)和監(jiān)控。

Executor 框架

Executor 框架是 Java5 之后引進(jìn)的,在 Java 5 之后,通過(guò) Executor 來(lái)啟動(dòng)線程比使用 Thread 的 start 方法更好,除了更易管理,效率更好(用線程池實(shí)現(xiàn),節(jié)約開(kāi)銷)外,還有關(guān)鍵的一點(diǎn):有助于避免 this 逃逸問(wèn)題。

補(bǔ)充:this 逃逸是指在構(gòu)造函數(shù)返回之前其他線程就持有該對(duì)象的引用. 調(diào)用尚未構(gòu)造完全的對(duì)象的方法可能引發(fā)令人疑惑的錯(cuò)誤。

Executor 框架不僅包括了線程池的管理,還提供了線程工廠、隊(duì)列以及拒絕策略等,Executor 框架讓并發(fā)編程變得更加簡(jiǎn)單。

Executor 框架結(jié)構(gòu)(主要由三大部分組成)

任務(wù)(Runnable /Callable) 執(zhí)行任務(wù)需要實(shí)現(xiàn)的 Runnable 接口 或 Callable接口。Runnable 接口或 Callable 接口 實(shí)現(xiàn)類都可以被 ThreadPoolExecutor 或 ScheduledThreadPoolExecutor 執(zhí)行。 任務(wù)的執(zhí)行(Executor) 如下圖所示,包括任務(wù)執(zhí)行機(jī)制的核心接口 Executor ,以及繼承自 Executor 接口的 ExecutorService 接口。ThreadPoolExecutor 和 ScheduledThreadPoolExecutor 這兩個(gè)關(guān)鍵類實(shí)現(xiàn)了 ExecutorService 接口。

這里提了很多底層的類關(guān)系,但是,實(shí)際上我們需要更多關(guān)注的是 ThreadPoolExecutor 這個(gè)類,這個(gè)類在我們實(shí)際使用線程池的過(guò)程中,使用頻率還是非常高的。

注意: 通過(guò)查看 ScheduledThreadPoolExecutor 源代碼我們發(fā)現(xiàn) ScheduledThreadPoolExecutor 實(shí)際上是繼承了 ThreadPoolExecutor 并實(shí)現(xiàn)了 ScheduledExecutorService ,而 ScheduledExecutorService 又實(shí)現(xiàn)了 ExecutorService,正如我們下面給出的類關(guān)系圖顯示的一樣。

ThreadPoolExecutor 類描述:

//AbstractExecutorService實(shí)現(xiàn)了ExecutorService接口public class ThreadPoolExecutor extends AbstractExecutorService

ScheduledThreadPoolExecutor 類描述:

//ScheduledExecutorService實(shí)現(xiàn)了ExecutorService接口public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ScheduledExecutorService

Java使用線程池的優(yōu)勢(shì)有哪些

3) 異步計(jì)算的結(jié)果(Future) Future 接口以及 Future 接口的實(shí)現(xiàn)類 FutureTask 類都可以代表異步計(jì)算的結(jié)果。

當(dāng)我們把 Runnable接口 或 Callable 接口 的實(shí)現(xiàn)類提交給 ThreadPoolExecutor 或 ScheduledThreadPoolExecutor 執(zhí)行。(調(diào)用 submit() 方法時(shí)會(huì)返回一個(gè) FutureTask 對(duì)象)

Executor 框架的使用示意圖

Java使用線程池的優(yōu)勢(shì)有哪些

主線程首先要?jiǎng)?chuàng)建實(shí)現(xiàn) Runnable 或者 Callable 接口的任務(wù)對(duì)象。 把創(chuàng)建完成的實(shí)現(xiàn) Runnable/Callable接口的 對(duì)象直接交給 ExecutorService 執(zhí)行: ExecutorService.execute(Runnable command))或者也可以把 Runnable 對(duì)象或Callable 對(duì)象提交給 ExecutorService 執(zhí)行(ExecutorService.submit(Runnable task)或 ExecutorService.submit(Callable task))。 如果執(zhí)行 ExecutorService.submit(…),ExecutorService 將返回一個(gè)實(shí)現(xiàn)Future接口的對(duì)象(我們剛剛也提到過(guò)了執(zhí)行 execute()方法和 submit()方法的區(qū)別,submit()會(huì)返回一個(gè) FutureTask 對(duì)象)。由于 FutureTask 實(shí)現(xiàn)了 Runnable,我們也可以創(chuàng)建 FutureTask,然后直接交給 ExecutorService 執(zhí)行。 最后,主線程可以執(zhí)行 FutureTask.get()方法來(lái)等待任務(wù)執(zhí)行完成。主線程也可以執(zhí)行 FutureTask.cancel(boolean mayInterruptIfRunning)來(lái)取消此任務(wù)的執(zhí)行。

以上就是Java使用線程池的優(yōu)勢(shì)有哪些的詳細(xì)內(nèi)容,更多關(guān)于Java 線程池的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产精品久久一区二区三区 | 国产精品高潮呻吟久久 | 亚洲免费大片 | 青青视频网 | 四虎8848| 伊人成人在线 | 丁香六月激情 | 亚洲免费大片 | 97国产精品人人爽人人做 | 欧美午夜视频 | 日日夜夜av | 免费看黄色aaaaaa 片 | 又黄又爽的网站 | 欧美亚洲天堂 | 日韩欧美中文字幕在线观看 | 国产成人精品一区二区三区四区 | 亚洲精品一区二区在线观看 | 999久久久国产精品 亚洲黄色三级 | 欧美激情一区二区三区 | 午夜av在线 | 日韩一区二区av | 欧美狠狠操 | 天天色影院 | 黄色片播放 | 国产一级一片免费播放放a 免费国产视频 | 欧美黄色三级视频 | 午夜精品视频 | 国产精品国产精品国产专区不片 | 九九视频在线 | 国产激情在线视频 | 欧美日韩免费一区二区三区 | 亚洲精品www久久久久久广东 | 久久久夜色精品 | 中文字幕麻豆 | 久久久精品一区二区 | 999毛片| 懂色av色吟av夜夜嗨 | 天天操天天操 | 国产又粗又猛又黄又爽的视频 | 天天操天天干天天 | 日韩天堂网|