欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

Executor 框架

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

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

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

Executor 框架結構(主要由三大部分組成)

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

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

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

ThreadPoolExecutor 類描述:

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

ScheduledThreadPoolExecutor 類描述:

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

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

當我們把 Runnable接口 或 Callable 接口 的實現(xiàn)類提交給 ThreadPoolExecutor 或 ScheduledThreadPoolExecutor 執(zhí)行。(調用 submit() 方法時會返回一個 FutureTask 對象)

Executor 框架的使用示意圖

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

以上就是Java使用線程池的優(yōu)勢有哪些的詳細內容,更多關于Java 線程池的資料請關注腳本之家其它相關文章!

相關文章

  • SpringBoot?LiteFlow引擎框架使用原理解析

    SpringBoot?LiteFlow引擎框架使用原理解析

    LiteFlow是一個輕量且強大的國產規(guī)則引擎框架,可用于復雜的組件化業(yè)務的編排領域,本文給大家介紹SpringBoot?LiteFlow引擎框架的相關操作,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • List集合多個復雜字段判斷去重的案例

    List集合多個復雜字段判斷去重的案例

    今天小編就為大家分享一篇關于List集合多個復雜字段判斷去重的案例,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java方法簽名為何不包含返回值類型

    Java方法簽名為何不包含返回值類型

    這篇文章主要介紹了Java方法簽名為何不包含返回值類型,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Android內存泄漏實戰(zhàn)解析

    Android內存泄漏實戰(zhàn)解析

    Java是垃圾回收語言的一種。這篇文章主要介紹了Android內存泄漏 的相關資料,需要的朋友可以參考下
    2016-10-10
  • Sentinel Dashboard限流規(guī)則保存方式

    Sentinel Dashboard限流規(guī)則保存方式

    這篇文章主要介紹了Sentinel Dashboard限流規(guī)則保存方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java數(shù)據(jù)機構中關于并查集的詳解

    Java數(shù)據(jù)機構中關于并查集的詳解

    并查集是一種樹型的數(shù)據(jù)結構,用于處理一些不相交集合的合并及查詢問題,如果你還不了解并查集,請看接下來的文章,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值
    2021-09-09
  • 解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry:問題

    解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry

    這篇文章主要介紹了解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry:問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • JavaSE的邏輯控制你了解嗎

    JavaSE的邏輯控制你了解嗎

    這篇文章主要為大家詳細介紹了JavaSE的邏輯控制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java?輪詢鎖使用時遇到問題解決方案

    Java?輪詢鎖使用時遇到問題解決方案

    這篇文章主要介紹了Java?輪詢鎖使用時遇到問題解決方案,當我們遇到死鎖之后,除了可以手動重啟程序解決之外,還可以考慮使用順序鎖和輪詢鎖,但是過程也會遇到一些問題,接下來我們一起進入下面文章了解解決方案,需要的小伙伴可以參考一下
    2022-05-05
  • SpringBoot整合OpenFeign的坑

    SpringBoot整合OpenFeign的坑

    最近試用SpringBoot+K8S,遇到了個坑,通過OpenFeign請求返回值LocalDateTime發(fā)生了異常,本文就詳細的介紹一下解決方法,感興趣的可以了解一下
    2021-07-07

最新評論