日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Executors源码解读——创建ExecutorService线程池

發布時間:2025/3/11 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Executors源码解读——创建ExecutorService线程池 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Executors源碼解讀——創建ExecutorService線程池

      • 〇、[源碼版本] jdk 1.8
      • 一、線程池概述
      • 二、線程池創建
      • 三、Executors源碼解讀
        • newFixedThreadPool()
        • newWorkStealingPool()
        • newSingleThreadExecutor()
        • newCachedThreadPool()
        • newSingleThreadScheduledExecutor()

〇、[源碼版本] jdk 1.8

一、線程池概述

1)線程的創建需要操作線程資源、棧空間等,大量且頻繁的創建與銷毀需要消耗大量時間。

2)使用線程池處理,就可以復用一組線程,把一小組任務交給線程池分發處理。

3)線程池內維護了若干數量的線程:
a.沒有任務時候,這些線程處于等待狀態
b.有新任務,就分配一個空閑的線程執行
c.若所有線程處于忙碌狀態,新任務要么放入隊列等待,要么增加一個新線程進行處理。

二、線程池創建

ExecutorService是接口,它常用的創建方式可以通過Executors的方法來創建。

三、Executors源碼解讀

為這些對象提供工廠和實用方法:在concurrent包中定義的Executor、ExecutorService、ScheduledExecutorService、ThreadFactory和Callable類。

提供的方法返回結果類型有:
a.常規配置的ExecutorService
b.常規配置的ScheduledExecutorService
c.禁止修改配置的封裝后的ExecutorService
(d.將新創建的線程設置為已知狀態的ThreadFactory)
(e.在其他類似封閉(closure-like)的形式以外的Callable)
本文主要討論前三種。

newFixedThreadPool()

public static ExecutorService newFixedThreadPool(int nThreads)

Executors創建一個線程池,該線程池復用固定數量的線程,線程操作在共享的無界隊列。在任何時候,最多nThreads個線程將正在運行處理任務。

如果在所有線程都處于忙碌狀態時,提交了其他任務,它們將在隊列中等待,直到有線程可用。

如果任何線程因執行期間的失敗而終止,且在關閉之前,如果后續任務需要執行,一個新線程將取而代之。

池中的線程會一直存在,直到明確調用ExecutorService的shutdown方法。

a.參數:
nThreads 池中的線程數
b.返回:
ExecutorService 新創建的線程池
c.異常
throws IllegalArgumentException
如果nThreads個數小于等于0時

newWorkStealingPool()

public static ExecutorService newWorkStealingPool(int parallelism)

創建一個線程池,它維持足夠的線程來支持給定的并行度級別parallelism,并且可能會使用多個隊列來減少爭用。

并行度級別對應于最大的活躍線程參與數量、或可用于參與任務處理的線程數。線程的實際數量可能動態增長和收縮。work-stealing線程池不保證提交任務的執行順序。

a.參數:
parallelism 目標并行度級別
b.返回:
ExecutorService 新創建的線程池
c.異常
throws IllegalArgumentException
如果nThreads個數小于等于0時

public static ExecutorService newWorkStealingPool()

創建一個work-stealing線程池,使用所有Runtime中的availableProcessors(可用處理器)作為其目標并行度級別。

a.參數:無
b.返回:
ExecutorService 新創建的線程池
c.異常
throws IllegalArgumentException
如果nThreads個數小于等于0時

newSingleThreadExecutor()

public static ExecutorService newSingleThreadExecutor()

創建一個使用單個工作線程無界隊列中操作的Executor。

請注意,如果這個單個線程由于在關閉之前的執行過程中失敗而終止,如果后續任務需要執行,一個新線程將取而代之。

會保證任務按順序執行,并且不超過一個任務,在任何給定時間內處于活躍狀態。與其他等效的newFixedThreadPool(1)不同,返回的執行器保證不可重新配置以使用其他線程

a.參數:無
b.返回:
ExecutorService 新創建的線程池
c.異常:無

newCachedThreadPool()

public static ExecutorService newCachedThreadPool()

創建一個線程池,根據需要創建線程,但之前構建的線程可用時會復用它們。這些線程池通常會提高程序(execute執行許多短期異步任務的)的性能。

調用execute將復用先前構造的線程(如果可用)。如果沒有可用的現有線程,則會創建一個新的線程并將其添加到線程池中。

60 秒內未使用的線程將被終止并從緩存中移除。因此,保持空閑足夠長時間的線程池將不會消耗任何資源。

請注意,可以使用ThreadPoolExecutor構造函數創建具有相似屬性但不同細節(例如,超時參數)的池。

a.參數:無
b.返回:
ExecutorService 新創建的線程池
c.異常:無

newSingleThreadScheduledExecutor()

public static ScheduledExecutorService newSingleThreadScheduledExecutor()

創建一個單線程執行器executor,它可以安排命令在給定的延遲后運行,或定期執行

但是請注意,如果這個單一的線程在關閉之前的執行過程中由于失敗而終止,如果后續任務需要執行,一個新的線程將取而代之。

會保證任務按順序執行,并且不超過一項任務將在任何給定時間處于活躍狀態。與其他等效的newScheduledThreadPool(1)不同,返回的執行器保證不可重新配置以使用其他線程

總結

以上是生活随笔為你收集整理的Executors源码解读——创建ExecutorService线程池的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。