線程池在項目中實際應用,java 線程池 包_Java并發包下線程池類小結

 2023-10-04 阅读 25 评论 0

摘要:并發包下的線程池技術雖然常用,但是知識點較多易忘。所以,參考網絡資源做了一個小結,便于復習。1.Executor接口用于執行已提交的Runnable任務。Paste_Image.png線程池在項目中實際應用,2.ExecutorService接口繼承自Executor接口。Paste_Image.png3.Sche

并發包下的線程池技術雖然常用,但是知識點較多易忘。所以,參考網絡資源做了一個小結,便于復習。

1.Executor接口

用于執行已提交的Runnable任務。

a986ea62fb02b2045d1e7ed2d5ded1cb.png

Paste_Image.png

線程池在項目中實際應用,2.ExecutorService接口

繼承自Executor接口。

f91829945a9a2b5c41b531c8311c20d8.png

Paste_Image.png

3.ScheduledExecutorService接口

繼承自ExecutorService接口,在給定的延遲后執行任務或定時執行任務,類圖如下。

c102e9645ea52361b502a4a1ee8e67e2.png

java線程池的使用例子、Paste_Image.png

3d64e502d990e251b95638331f3a6baf.png

Paste_Image.png

4.RejectedExecutionHandler接口

當Executor已經關閉或任務隊列已經飽和時,提交新任務時,Executor對應的處理策略。

5bacd8084371db2527fcd3d4d967c698.png

Paste_Image.png

java線程池最佳實踐。5.RejectedExecutionHandler接口實現類

RejectedExecutionHandler接口4個實現類對應4種處理策略:

1bc4274d958d90dd723882eac3381db0.png

Paste_Image.png

6.BlockingQueue接口

BlockingQueue接口定義任務隊列。

9a9fa025f7d10e57b617e143a3a37af7.png

JAVA高并發線程池,Paste_Image.png

7.ArrayBlockingQueue類

實現了BlockingQueue接口。一個由數組支持的有界阻塞隊列。此隊列按 FIFO(先進先出)原則對元素進行排序。隊列的頭部是在隊列中存在時間最長的元素。隊列的尾部是在隊列中存在時間最短的元素。新元素插入到隊列的尾部,隊列獲取操作則是從隊列頭部開始獲得元素。類圖如下圖所示。

3eb0409f8a348d848f7d2fa34cbbe23f.png

Paste_Image.png

4ce2ed5569c98de87a4b4871a8881613.png

Paste_Image.png

33fedede1aa4bccb5469701063898024.png

兩個有序鏈表序列的合并,Paste_Image.png

8.Executors類

為ExecutorService、ScheduledExecutorService、ThreadFactory和Callable提供了便捷的工廠方法。

此類支持以下各種方法:

* 創建并返回設置有常用配置字符串的 ExecutorService 的方法。

線程池使用場景舉例,* 創建并返回設置有常用配置字符串的 ScheduledExecutorService 的方法。

* 創建并返回“包裝的”ExecutorService 方法,它通過使特定于實現的方法不可訪問來禁用重新配置。

* 創建并返回 ThreadFactory 的方法,它可將新創建的線程設置為已知的狀態。

* 創建并返回非閉包形式的 Callable 的方法,這樣可將其用于需要 Callable 的執行方法中。

66be9288c1db5fd67600db6e9145e468.png

Paste_Image.png

classloadef運行機制簡單。9.ThreadPoolExecutor類

類圖如下圖所示。

b2e3bc73a508e9e4083a19aa6672428b.png

Paste_Image.png

ThreadPoolExecutor使用Executors工廠方法Executors.newCachedThreadPool()(***線程池,可以進行自動線程回收)、Executors.newFixedThreadPool(int)(固定大小線程池)和 Executors.newSingleThreadExecutor()(單個后臺線程)配置的線程池執行每個提交的任務。

760607db03eb73d25fdbb45fcb469109.png

Paste_Image.png

Java基礎筆試題?使用構造方法可以創建一個自定義的線程池。ThreadPoolExecutor將根據corePoolSize和maximumPoolSize設置的邊界自動調整池大小。當新任務在方法execute(java.lang.Runnable) 中提交時,如果運行的線程少于corePoolSize,則創建新線程來處理請求,即使其他輔助線程是空閑的。如果運行的線程多于corePoolSize而少于 maximumPoolSize,則僅當隊列滿時才創建新線程。如果設置的corePoolSize和maximumPoolSize相同,則創建了固定大小的線程池。如果將 maximumPoolSize 設置為基本的***值(如Integer.MAX_VALUE),則允許池適應任意數量的并發任務。在大多數情況下,核心和最大池大小僅基于構造來設置,不過也可以使用setCorePoolSize(int)和 setMaximumPoolSize(int)進行動態更改。所有BlockingQueue都可用于傳輸和保持提交的任務。可以使用此隊列與池大小進行交互:

* 如果運行的線程少于corePoolSize,則Executor始終首選添加新的線程,而不進行排隊。

* 如果運行的線程等于或多于corePoolSize,則Executor始終首選將請求加入隊列,而不添加新的線程。

* 如果無法將請求加入隊列,則創建新的線程,除非創建此線程超出maximumPoolSize,在這種情況下,任務將被拒絕。

10.ScheduledThreadPoolExecutor類

java多線程是并發還是并行,實現了ScheduledExecutorService接口,在給定的延遲后執行任務,或者定時執行任務,按照提交的先進先出(FIFO)順序來啟用那些被安排在同一執行時間的任務。類圖如下所示。

625c92cb6d7d2847526a061c1359c5e7.png

Paste_Image.png

雖然此類繼承自ThreadPoolExecutor,但是幾個繼承的調整方法對此類并無作用。特別是,因為它作為一個使用corePoolSize 線程和一個***隊列的固定大小的池,所以調整maximumPoolSize沒有什么效果。

aea64ee8a587745544b0c6c4f1c0554d.png

Paste_Image.png

1fce8fc99604f3da774ef59268f78dae.png

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/112828.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息