亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Java使用線程池的優勢有哪些

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

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

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

降低資源消耗。通過重復利用已創建的線程降低線程創建和銷毀造成的消耗。 提高響應速度。當任務到達時,任務可以不需要的等到線程創建就能立即執行。 提高線程的可管理性。線程是稀缺資源,如果無限制的創建,不僅會消耗系統資源,還會降低系統的穩定性,使用線程池可以進行統一的分配,調優和監控。

Executor 框架

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

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

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

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

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

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

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

ThreadPoolExecutor 類描述:

//AbstractExecutorService實現了ExecutorService接口public class ThreadPoolExecutor extends AbstractExecutorService

ScheduledThreadPoolExecutor 類描述:

//ScheduledExecutorService實現了ExecutorService接口public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ScheduledExecutorService

Java使用線程池的優勢有哪些

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

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

Executor 框架的使用示意圖

Java使用線程池的優勢有哪些

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

以上就是Java使用線程池的優勢有哪些的詳細內容,更多關于Java 線程池的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 91精品免费观看 | 日韩欧美小视频 | 在线播放一区二区精品产 | 久久成人在线观看 | 日韩精品一区二区三区毛片 | 看一级毛片国产一级毛片 | 国产精品网站在线进入 | 黑色丝袜高跟国产在线91 | 国产精品免费看久久久香蕉 | 国产不卡视频一区二区在线观看 | 可以免费观看欧美一级毛片 | 亚洲狠狠狠一区二区三区 | 不卡免费在线视频 | 91久久国产露脸国语对白 | 精品玖玖玖视频在线观看 | 亚洲色图第十页 | 搡女人的高清免费视频 | www.久久精品视频 | 国产91精选在线观看网站 | 911国产视频| 国产美女免费视频 | 亚洲a毛片 | 国产婷婷综合在线视频 | 12306播播影院午夜片在线观看 | 国内自产拍自a免费毛片 | 亚洲一色 | 一级毛片中文字幕 | 亚洲欧美在线一区 | 成人深爱网 | 中国黄色一级 | 精品影院| 久久中文字幕美谷朱里 | 国产一级精品毛片 | 激情性生活视频在线播放免费观看 | 亚洲精品区一区二区三区四 | 96精品视频在线播放免费观看 | 香蕉视频免费在线 | 久在线精品视频 | 日韩高清在线二区 | 免费网站在线高清观看 | 欧美激情精品久久久久久久 |