并發包下的線程池技術雖然常用,但是知識點較多易忘。所以,參考網絡資源做了一個小結,便于復習。
1.Executor接口
用于執行已提交的Runnable任務。
Paste_Image.png
線程池在項目中實際應用,2.ExecutorService接口
繼承自Executor接口。
Paste_Image.png
3.ScheduledExecutorService接口
繼承自ExecutorService接口,在給定的延遲后執行任務或定時執行任務,類圖如下。
java線程池的使用例子、Paste_Image.png
Paste_Image.png
4.RejectedExecutionHandler接口
當Executor已經關閉或任務隊列已經飽和時,提交新任務時,Executor對應的處理策略。
Paste_Image.png
java線程池最佳實踐。5.RejectedExecutionHandler接口實現類
RejectedExecutionHandler接口4個實現類對應4種處理策略:
Paste_Image.png
6.BlockingQueue接口
BlockingQueue接口定義任務隊列。
JAVA高并發線程池,Paste_Image.png
7.ArrayBlockingQueue類
實現了BlockingQueue接口。一個由數組支持的有界阻塞隊列。此隊列按 FIFO(先進先出)原則對元素進行排序。隊列的頭部是在隊列中存在時間最長的元素。隊列的尾部是在隊列中存在時間最短的元素。新元素插入到隊列的尾部,隊列獲取操作則是從隊列頭部開始獲得元素。類圖如下圖所示。
Paste_Image.png
Paste_Image.png
兩個有序鏈表序列的合并,Paste_Image.png
8.Executors類
為ExecutorService、ScheduledExecutorService、ThreadFactory和Callable提供了便捷的工廠方法。
此類支持以下各種方法:
* 創建并返回設置有常用配置字符串的 ExecutorService 的方法。
線程池使用場景舉例,* 創建并返回設置有常用配置字符串的 ScheduledExecutorService 的方法。
* 創建并返回“包裝的”ExecutorService 方法,它通過使特定于實現的方法不可訪問來禁用重新配置。
* 創建并返回 ThreadFactory 的方法,它可將新創建的線程設置為已知的狀態。
* 創建并返回非閉包形式的 Callable 的方法,這樣可將其用于需要 Callable 的執行方法中。
Paste_Image.png
classloadef運行機制簡單。9.ThreadPoolExecutor類
類圖如下圖所示。
Paste_Image.png
ThreadPoolExecutor使用Executors工廠方法Executors.newCachedThreadPool()(***線程池,可以進行自動線程回收)、Executors.newFixedThreadPool(int)(固定大小線程池)和 Executors.newSingleThreadExecutor()(單個后臺線程)配置的線程池執行每個提交的任務。
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)順序來啟用那些被安排在同一執行時間的任務。類圖如下所示。
Paste_Image.png
雖然此類繼承自ThreadPoolExecutor,但是幾個繼承的調整方法對此類并無作用。特別是,因為它作為一個使用corePoolSize 線程和一個***隊列的固定大小的池,所以調整maximumPoolSize沒有什么效果。
Paste_Image.png
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态