最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年09月08日 14:21:10   作者:崔笑顏  
這篇文章主要介紹了Java使用線程池的優(yōu)勢(shì)有哪些,幫助大家更好的理解和掌握java池化技術(shù),感興趣的朋友可以了解下

池化技術(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ō)一下使用線程池的好處:

  1. 降低資源消耗。通過(guò)重復(fù)利用已創(chuàng)建的線程降低線程創(chuàng)建和銷毀造成的消耗。
  2. 提高響應(yīng)速度。當(dāng)任務(wù)到達(dá)時(shí),任務(wù)可以不需要的等到線程創(chuàng)建就能立即執(zhí)行。
  3. 提高線程的可管理性。線程是稀缺資源,如果無(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)(主要由三大部分組成)

  1. 任務(wù)(Runnable /Callable) 執(zhí)行任務(wù)需要實(shí)現(xiàn)的 Runnable 接口 或 Callable接口。Runnable 接口或 Callable 接口 實(shí)現(xiàn)類都可以被 ThreadPoolExecutor 或 ScheduledThreadPoolExecutor 執(zhí)行。
  2. 任務(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

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 框架的使用示意圖

  1. 主線程首先要?jiǎng)?chuàng)建實(shí)現(xiàn) Runnable 或者 Callable 接口的任務(wù)對(duì)象。
  2. 把創(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))。
  3. 如果執(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í)行。
  4. 最后,主線程可以執(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)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java輸入輸出流實(shí)例詳解

    Java輸入輸出流實(shí)例詳解

    這篇文章主要介紹了Java輸入輸出流,結(jié)合實(shí)例形式詳細(xì)分析了Java常見(jiàn)的輸入輸出常用操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-09-09
  • java 使用foreach遍歷集合元素的實(shí)例

    java 使用foreach遍歷集合元素的實(shí)例

    這篇文章主要介紹了java 使用foreach遍歷集合元素的實(shí)例的相關(guān)資料,這里提供實(shí)例幫助大家理解如何使用foreach 進(jìn)行遍歷,希望能幫助到大家,
    2017-08-08
  • 你真的懂java的日志系統(tǒng)嗎

    你真的懂java的日志系統(tǒng)嗎

    日志管理的第一件事,就是日志的收集,日志收集是開(kāi)發(fā)者必備的技巧,不管是哪個(gè)開(kāi)發(fā)語(yǔ)言,哪個(gè)開(kāi)發(fā)平臺(tái),日志收集的插件都是有很多選擇的,下面這篇文章主要給大家介紹了關(guān)于java日志系統(tǒng)的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • java中刪除數(shù)組中重復(fù)元素方法探討

    java中刪除數(shù)組中重復(fù)元素方法探討

    這個(gè)是一個(gè)老問(wèn)題,但是發(fā)現(xiàn)大多數(shù)人說(shuō)的還不夠透。小弟就在這里拋磚引玉了,歡迎拍磚
    2013-10-10
  • Java深入分析動(dòng)態(tài)代理

    Java深入分析動(dòng)態(tài)代理

    動(dòng)態(tài)代理指的是,代理類和目標(biāo)類的關(guān)系在程序運(yùn)行的時(shí)候確定的,客戶通過(guò)代理類來(lái)調(diào)用目標(biāo)對(duì)象的方法,是在程序運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)的創(chuàng)建目標(biāo)類的代理對(duì)象。本文將通過(guò)案例詳細(xì)講解一下Java動(dòng)態(tài)代理的原理及實(shí)現(xiàn),需要的可以參考一下
    2022-07-07
  • Java Array與ArrayList區(qū)別詳解

    Java Array與ArrayList區(qū)別詳解

    這篇文章主要介紹了Java Array與ArrayList區(qū)別詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Java入門(mén)基礎(chǔ)之常規(guī)的命名方法和變量的值及其引用

    Java入門(mén)基礎(chǔ)之常規(guī)的命名方法和變量的值及其引用

    這篇文章主要介紹了Java的命名方法和變量的值及其引用,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • JavaWeb學(xué)習(xí)過(guò)程之MVC查詢模式詳解

    JavaWeb學(xué)習(xí)過(guò)程之MVC查詢模式詳解

    這篇文章主要介紹了JavaWeb學(xué)習(xí)過(guò)程之MVC查詢模式詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • windows如何使用bat腳本后臺(tái)啟動(dòng)/停止和重啟jar包服務(wù)

    windows如何使用bat腳本后臺(tái)啟動(dòng)/停止和重啟jar包服務(wù)

    這篇文章主要介紹了windows使用bat腳本后臺(tái)啟動(dòng)/停止和重啟jar包服務(wù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • java LinkedList的實(shí)例詳解

    java LinkedList的實(shí)例詳解

    這篇文章主要介紹了java LinkedList的實(shí)例詳解的相關(guān)資料,通過(guò)本文希望大家能徹底了解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09

最新評(píng)論

永善县| 壤塘县| 怀安县| 资兴市| 库车县| 张掖市| 福海县| 夹江县| 饶河县| 沁源县| 亳州市| 周口市| 潮州市| 德庆县| 开阳县| 莆田市| 咸阳市| 定日县| 思茅市| 稻城县| 德庆县| 营口市| 廊坊市| 鄂尔多斯市| 吉水县| 乐平市| 明溪县| 密山市| 砚山县| 永德县| 商水县| 吉林省| 栾川县| 横峰县| 麦盖提县| 乐山市| 永德县| 沅陵县| 法库县| 阿巴嘎旗| 江达县|