一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java使用線程池的優(yōu)勢有哪些

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

2020-09-09 00:34崔笑顏 Java教程

這篇文章主要介紹了Java使用線程池的優(yōu)勢有哪些,幫助大家更好的理解和掌握java池化技術,感興趣的朋友可以了解下

池化技術相比大家已經(jīng)屢見不鮮了,線程池、數(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 類描述:

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

ScheduledThreadPoolExecutor 類描述:

?
1
2
3
4
//ScheduledExecutorService實現(xiàn)了ExecutorService接口
public class ScheduledThreadPoolExecutor
  extends ThreadPoolExecutor
  implements ScheduledExecutorService

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

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

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

Executor 框架的使用示意圖

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

  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 線程池的資料請關注服務器之家其它相關文章!

原文鏈接:https://cloud.tencent.com/developer/article/1640007

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色啊色 | 性白俄罗斯高清xxxxx | 国产青色| 国产思妍小仙女一二区 | 厨房里摸着乳丰满在线观看 | 国产日韩精品一区二区在线观看播放 | 91中文字幕yellow字幕网 | 欧美性xxx狂流白浆 欧美性f | 久久精品动漫网一区二区 | 成人毛片高清视频观看 | 国产精品视频在这里有精品 | 国产图片综合区 | 青草国产 | 亚洲白拍 | jizz农村野外jizz农民 | 波多野结衣一区 | 出轨娇妻的呻吟1—9 | 亚洲大片免费观看 | 精品国产一区二区三区久久影院 | 亚洲精品动漫在线观看 | 久久精品一区二区三区资源网 | 国产99久久精品 | 青青青在线视频播放 | 无限资源在线观看播放 | 视频在线精品 | 7777色鬼xxxx欧美色夫 | 修修视频在线观看 | oneday日本在线观看完整版 | 国产成人+亚洲欧洲 | 无码国产成人777爽死在线观看 | 十大免费批日的软件 | 潘金莲西门庆一级淫片aaaaaa | 精品免费tv久久久久久久 | 羞羞漫画免费漫画页面在线看漫画秋蝉 | 国产精品久久久久久久久免费 | 美国69xxxx59| 处女呦呦 | 美女在线看永久免费网址 | www.91在线视频 | 欧美日韩国产亚洲人成 | 四虎成人免费 |