Executors 提供了哪些創建線程池的方法?

java.util.concurrent.Executors 是一個工廠類,提供了一些靜態方法來創建各種類型的線程池。這些方法簡單易用,可以快速創建常見的線程池類型。以下是 Executors 提供的主要創建線程池的方法及其特性:

1.?newFixedThreadPool(int nThreads)

創建一個固定大小的線程池。線程池包含固定數量的線程,這些線程在整個生命周期中保持不變。如果所有線程都在忙于執行任務,其他任務將在隊列中等待。

特點

  • 固定數量的線程。
  • 適用于負載較為穩定的場景。
 

java復制代碼

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(4);

2.?newCachedThreadPool()

創建一個可根據需要創建新線程的線程池。如果線程池中的線程在前一次任務執行后60秒內沒有被復用,那么該線程將被終止并從池中移除。當執行很多短期異步任務時,可以提高程序性能。線程池規模不固定,可以根據需求自動調整大小。

特點

  • 線程數量動態擴展。
  • 適用于執行大量短期任務的場景。
 

java復制代碼

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

3.?newSingleThreadExecutor()

創建一個單線程的線程池。此線程池只有一個線程,所有任務將被順序執行。適用于需要保證任務按順序執行的場景。

特點

  • 單個線程,保證任務順序執行。
  • 適用于需要順序執行任務的場景。
 

java復制代碼

ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

4.?newScheduledThreadPool(int corePoolSize)

創建一個線程池,可以定期或延時執行任務。適用于需要定時任務或延時任務的場景。

特點

  • 定期或延時執行任務。
  • 支持固定數量的線程。
 

java復制代碼

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(4);

5.?newSingleThreadScheduledExecutor()

創建一個單線程的調度線程池。類似于 newSingleThreadExecutor(),但具有調度功能,可以定期或延時執行任務。

特點

  • 單個線程,保證任務按順序執行。
  • 支持定期或延時任務。
 

java復制代碼

ScheduledExecutorService singleThreadScheduledExecutor = Executors.newSingleThreadScheduledExecutor();

例子

以下是如何使用這些方法創建和使用線程池的示例:

 

java復制代碼

import java.util.concurrent.*; public class ExecutorsExample { public static void main(String[] args) { // newFixedThreadPool example ExecutorService fixedThreadPool = Executors.newFixedThreadPool(4); submitTasks(fixedThreadPool, "FixedThreadPool"); // newCachedThreadPool example ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); submitTasks(cachedThreadPool, "CachedThreadPool"); // newSingleThreadExecutor example ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(); submitTasks(singleThreadExecutor, "SingleThreadExecutor"); // newScheduledThreadPool example ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(2); scheduleTasks(scheduledThreadPool, "ScheduledThreadPool"); // newSingleThreadScheduledExecutor example ScheduledExecutorService singleThreadScheduledExecutor = Executors.newSingleThreadScheduledExecutor(); scheduleTasks(singleThreadScheduledExecutor, "SingleThreadScheduledExecutor"); } private static void submitTasks(ExecutorService executorService, String poolName) { for (int i = 0; i < 5; i++) { final int taskId = i; executorService.submit(() -> { System.out.println(poolName + " executing task " + taskId + " on thread " + Thread.currentThread().getName()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); } executorService.shutdown(); } private static void scheduleTasks(ScheduledExecutorService scheduledExecutorService, String poolName) { for (int i = 0; i < 5; i++) { final int taskId = i; scheduledExecutorService.schedule(() -> { System.out.println(poolName + " executing task " + taskId + " on thread " + Thread.currentThread().getName()); }, 2, TimeUnit.SECONDS); } scheduledExecutorService.shutdown(); } }

總結

Executors 工廠類提供了便捷的方法來創建常見類型的線程池:

  1. newFixedThreadPool:固定大小的線程池,適用于負載較為穩定的場景。
  2. newCachedThreadPool:可根據需要創建新線程的線程池,適用于執行大量短期異步任務。
  3. newSingleThreadExecutor:單線程的線程池,適用于需要順序執行任務的場景。
  4. newScheduledThreadPool:支持定期或延時任務的線程池,適用于需要定時任務的場景。
  5. newSingleThreadScheduledExecutor:單線程的調度線程池,適用于需要順序執行定期或延時任務的場景。

這些方法提供了簡單易用的接口,可以滿足各種常見的并發編程需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38104.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38104.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38104.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機系統基礎(二)

1.數值數據的表示 為什么采用二進制&#xff1f; 二進制只有兩種基本狀態&#xff0c;兩個物理器件就可以表示0和1二進制的編碼、技術、運算規則都很簡單0和1與邏輯命題的真假對應&#xff0c;方便通過邏輯門電路實現算術運算 數值數據表示的三要素 進位記數制&#xff08;十…

以太網常用協議——ARP協議

文章目錄 一、 ARP協議與MAC層1.TCP/IP協議2. MAC地址3. ARP映射4. ARP請求和ARP應答 二、以太網幀格式三、ARP協議1. 以太網ARP通信測試&#xff1a; 以太網使用的協議很多&#xff0c;常用的有ARP、UDP等。 再介紹具體協議之前需要先知道一些基本的概念&#xff1a; 一、 AR…

COB顯示屏與GOB顯示屏封裝方式有哪些不同?

很多用戶因為使用場景的特殊性&#xff0c;所以會選擇防護能力更強的COB顯示屏或者是GOB顯示屏&#xff0c;兩種產品從名稱上看只是有一個字母的懸殊&#xff0c;其實使用的工藝截然不同&#xff0c;GOB顯示屏通常是在SMD顯示屏的基礎上進行升級&#xff0c;而COB顯示屏則是完全…

獨立開發者系列(15)——git的使用

上一篇14文章觸發了敏感話題&#xff0c;直接未過審核&#xff0c;看來技術博客也有敏感點。 大部分情況下&#xff0c;獨立項目是你一個人開發&#xff0c;但是當你接的項目比較大的時候&#xff0c;你需要其他人的幫忙&#xff0c;這個時候你要把代碼分享給別人。因為如果你…

【分布式數據倉庫Hive】Hive的安裝配置及測試

目錄 一、數據庫MySQL安裝 1. 檢查操作系統是否有MySQL安裝殘留 2. 刪除殘留的MySQL安裝&#xff08;使用yum&#xff09; 3. 安裝MySQL依賴包、客戶端和服務器 4. MySQL登錄賬戶root設置密碼&#xff0c;密碼值自定義&#xff0c;這里是‘abc1234’ 5. 啟動MySQL服務 6…

maven設置阿里云鏡像源(加速)

一、settings.xml介紹 settings.xml是maven的全局配置文件&#xff0c;maven的配置文件存在三個地方 項目中的pom.xml&#xff0c;這個是pom.xml所在項目的局部配置文件用戶配置&#xff1a;${user.home}/.m2/settings.xml全局配置&#xff1a;${M2_HOME}/conf/settings.xml 優…

YOLOV10訓練集制作+Train+Val記錄

代碼地址&#xff1a;THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection (github.com) 一、數據制作 在這篇文章有講過如何制作數據集及代碼實現 YOLOV9訓練集制作TrainVal記錄_yolov9 train yaml-CSDN博客 二、配置文件 &#xff08;1&#xff09;代碼結構…

“私域流量:解鎖電商新機遇,共創數字化未來“

一、私域流量的戰略意義再探 步入數字化浪潮的深處&#xff0c;流量已成為企業成長不可或缺的血液。與廣泛但難以掌控的公域流量相比&#xff0c;私域流量以其獨特的專屬性和復用潛力&#xff0c;為企業鋪設了通往深度用戶關系的橋梁。它不僅賦能企業實現精準營銷&#xff0c;…

國產跨平臺高性能遠程控制軟件 RayLink,暢享高清流暢遠程辦公

不管是手機還是電腦&#xff0c;出色的硬件是好用的基礎。而其中的軟件工具&#xff0c;也是提高效率、減輕負擔的好東西。 免費的軟件工具眾多&#xff0c;當然付費工具也不少。大家可能會覺得正版軟件很貴&#xff0c;但國內軟件代理商的價格其實很實惠。 本次為大家介紹一…

CF1375D Replace by MEX 題解

題目大意 令 m e x mex mex 為序列中最小的沒有出現的數。 給你一個長度為 n n n 的序列 a a a&#xff0c;你可以進行不超過 2 n 2\times n 2n 次操作&#xff0c;使得序列 a a a 單調不降。每次操作你可以選定一個位置 p p p&#xff0c;并將 a p a_p ap? 賦值為 …

一文看盡AI繪畫工具 Stable Diffusion發展史,AI繪畫究竟發展到什么地步了?!

01、引言 Stable Diffusion 在短短兩年內發布了多個版本。最著名的版本是 1.5 和 SDXL。不過&#xff0c;還有許多其他版本值得一提。讓我們一起來探索穩定擴散模型的起源和發展。 閑話少說&#xff0c;我們直接開始吧&#xff01; 02、缺失的SD V1.0版本 Stable Diffusion…

材質相關內容整理 -ThreeJs

在Three.js中&#xff0c;材質是用來定義3D對象外觀的關鍵部分。Three.js支持多種材質文件和類型&#xff0c;每種材質都有其特定的用途和優勢。下面簡單整理了一下目前Three.js支持的材質文件和類型。 一、Three.js支持的材質文件類型 JPEG (.jpg) 和 PNG (.png) 用途&#x…

iphone新機官網驗機流程

若您想購買新款iPhone并在官方網站上驗證機器的真實性&#xff0c;可以按照以下流程進行&#xff1a; 打開蘋果官方網站&#xff08;https://www.apple.com&#xff09;。在導航欄中選擇“iPhone”選項&#xff0c;進入iPhone的產品頁面。在頁面中找到您想要購買的新款iPhone&…

C語言快速學習筆記

學習網站&#xff1a;C 語言教程 | 菜鳥教程 (runoob.com)C 語言教程 | 菜鳥教程 (runoob.com)C 語言教程 | 菜鳥教程 (runoob.com) 這個網站知識完整&#xff0c;講解清晰。 在線C語言編程工具&#xff1a;菜鳥教程在線編輯器 (runoob.com) 國外學習網站&#xff1a;C語言介…

【機器學習】機器學習的重要方法——線性回歸算法深度探索與未來展望

歡迎來到 破曉的歷程博客 引言 在數據科學日益重要的今天&#xff0c;線性回歸算法以其簡單、直觀和強大的預測能力&#xff0c;成為了眾多領域中的基礎工具。本文將詳細介紹線性回歸的基本概念、核心算法&#xff0c;并通過五個具體的使用示例來展示其應用&#xff0c;同時探…

使用conda創建虛擬環境,并將虛擬環境加載到jupyter notebook中【已解決】

使用conda創建虛擬環境&#xff0c;并將虛擬環境加載到jupyter notebook中【已解決】

免費分享:2000-2021年全國分省250mNDVI數據集(附下載方法)

NDVI (Normalized Difference Vegetation Index)歸一化植被指數&#xff0c;又稱標準化植被指數。是目前應用最廣泛的植被指數&#xff0c;與植被的分布呈線性相關&#xff0c;是植被生長狀態和空間分布的最佳指示因子&#xff0c;也是遙感估算植被覆蓋度(FVC&#xff0c;Fract…

深入學習 Kafka(2)- Partition 和 Topic

1. Partition的作用 Topic是邏輯的概念&#xff0c;Partition是物理的概念&#xff1a; Partition 對一個 Topic 的消息進行物理上的分離&#xff0c;讓消息可以分布在不同的實體機器上&#xff0c;可以提升系統吞吐量和并行處理能力。每個Partition可以有多個副本&#xff08…

交換機06_vlantrunk

一、虛擬局域網vlan 目的&#xff1a;劃分廣播域 思科設備如何去配置vlan 創建vlan設置對應的接口模式將接口加入vlan全局模式配置vlan vlan 2 設置接口模式&#xff08;目前需要將接口加入對應vlan&#xff0c;一般用于連接PC&#xff09; en conf t int f0/0 switchport m…

SAP S/4 FICO批量創建銀行主數據(銀行主數據/賬戶主數據)開發說明書(包括測試樣例、程序代碼僅作參考,不保證一定可以運行)

開發通用說明 新增程序——批導工具處理邏輯如下:自定義批導程序():點擊“執行”按鈕若數據錯誤或重復,先檢查導入的銀行賬號是否已在系統中存在,若已存在則狀態顯示為紅燈,并在消息反饋列提示“該銀行已經存在”。查重后若銀行賬戶為新增賬戶,但導入模板提供的數據有缺…