線程池的核心參數和線程創建方式,線程和進程

Java線程池的核心參數

Java線程池通過ThreadPoolExecutor類進行配置,其核心參數如下:

  1. corePoolSize(核心線程數)

    • 作用:線程池中保持活動的最小線程數,即使這些線程處于空閑狀態。

    • 行為:默認情況下,核心線程不會因空閑超時被回收(除非設置allowCoreThreadTimeOut(true))。

  2. maximumPoolSize(最大線程數)

    • 作用:線程池允許創建的最大線程數(包括核心線程和非核心線程)。

    • 觸發條件:當核心線程全忙且阻塞隊列已滿時,會創建臨時線程,直到達到此值。

  3. keepAliveTime(空閑線程存活時間)

    • 作用:非核心線程(臨時線程)在空閑狀態下的存活時間,超時后會被終止。

    • 單位:通過TimeUnit指定(如秒、毫秒)。

  4. workQueue(阻塞隊列)

    • 作用:存儲等待執行的任務。

    • 常用類型

      • LinkedBlockingQueue:無界隊列(默認容量極大,需警惕內存溢出)。

      • ArrayBlockingQueue:有界隊列(需指定容量)。

      • SynchronousQueue:不存儲任務,直接提交給線程處理。

  5. threadFactory(線程工廠)

    • 作用:自定義線程的創建方式(如設置線程名稱、優先級)。

    • 示例

      java

      復制

      下載

      ThreadFactory factory = r -> {Thread t = new Thread(r);t.setName("custom-thread-" + t.getId());return t;
      };
  6. handler(拒絕策略)

    • 作用:當線程池和隊列均滿時,處理新提交的任務。

    • 內置策略

      • AbortPolicy(默認):拋出RejectedExecutionException

      • CallerRunsPolicy:由提交任務的線程直接執行。

      • DiscardPolicy:靜默丟棄任務。

      • DiscardOldestPolicy:丟棄隊列中最舊的任務,重新提交當前任務。


Java中線程的創建方式

  1. 繼承Thread類

    java

    復制

    下載

    class MyThread extends Thread {@Overridepublic void run() {System.out.println("Thread running");}
    }
    MyThread t = new MyThread();
    t.start();
  2. 實現Runnable接口

    java

    復制

    下載

    Runnable task = () -> System.out.println("Runnable running");
    Thread t = new Thread(task);
    t.start();
  3. 實現Callable接口(支持返回值)

    java

    復制

    下載

    Callable<String> task = () -> "Result";
    ExecutorService executor = Executors.newSingleThreadExecutor();
    Future<String> future = executor.submit(task);
    String result = future.get(); // 阻塞獲取結果
    executor.shutdown();
  4. 使用線程池(推薦)

    java

    復制

    下載

    ExecutorService executor = Executors.newFixedThreadPool(4);
    executor.submit(() -> System.out.println("Task executed by thread pool"));
    executor.shutdown();

線程(Thread)與進程(Process)的區別

特性進程線程
資源分配獨立內存空間(堆、棧、系統資源)共享進程的內存空間(堆),獨立棧
創建開銷大(需分配獨立資源)小(共享進程資源)
通信方式復雜(如管道、Socket、共享內存)簡單(直接共享內存,但需同步控制)
切換成本高(涉及上下文切換和資源切換)低(僅切換線程上下文)
獨立性一個進程崩潰不影響其他進程一個線程崩潰可能導致整個進程終止
應用場景需要隔離的任務(如瀏覽器多標簽頁)高并發任務(如Web服務器處理請求)

線程池的工作流程

  1. 任務提交

    • 若核心線程未滿,立即創建新線程執行。

    • 若核心線程全忙,任務進入阻塞隊列。

  2. 隊列處理

    • 隊列未滿時,任務排隊等待核心線程處理。

    • 隊列已滿時,創建臨時線程(直到達到maximumPoolSize)。

  3. 拒絕策略觸發

    • 當線程池和隊列均滿時,執行拒絕策略。


示例:自定義線程池

java

復制

下載

ThreadPoolExecutor executor = new ThreadPoolExecutor(2,                              // corePoolSize4,                              // maximumPoolSize60, TimeUnit.SECONDS,           // keepAliveTimenew ArrayBlockingQueue<>(10),    // workQueuenew CustomThreadFactory(),      // threadFactorynew ThreadPoolExecutor.CallerRunsPolicy() // handler
);// 提交任務
for (int i = 0; i < 15; i++) {executor.submit(() -> {try {Thread.sleep(1000);System.out.println(Thread.currentThread().getName() + " 執行任務");} catch (InterruptedException e) {e.printStackTrace();}});
}executor.shutdown();

總結

  • 線程池核心參數:需根據任務類型(CPU/IO密集型)合理配置。

  • 線程創建方式:推薦使用線程池管理線程,避免頻繁創建銷毀開銷。

  • 線程與進程:線程輕量且共享資源,適合高并發;進程隔離性強,適合需要獨立環境的任務。

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

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

相關文章

【報錯】view size is not compatible with input tensor‘s size and stride

完整報錯 Traceback (most recent call last): File "D:\360MoveData\Users\HONOR\whu\TwoStageTraining.py", line 590, in <module> criterionseg_criterion, save_dir./models, writerwriter_first_stage) File "D:\360MoveData\Users\HONOR\whu\TwoS…

汽車免拆診斷案例|車輛行駛中急加速車身抖動故障排除 2 例

案例1 2017款豐田卡羅拉車行駛中急加速車身偶爾抖動 故障現象  一輛 2017款豐田卡羅拉車&#xff0c;搭載9NR 發動機&#xff0c;累計行駛里程約為9.6萬km。車主進廠反映&#xff0c;該車行駛中急加速時&#xff0c;車身偶爾抖動。 故障診斷  接車后試車&#xff0c;發動機…

vue3 computed方法使用詳細講解

Computed方法用于創建計算屬性&#xff0c;它的值由其他響應式數據計算得出&#xff0c;并且會在依賴數據發生改變時自動更新。因為vue3兼容vue2的選項式api,所以習慣用vue2的小伙伴可以直接用vue2的方法寫是沒有問題的。但我這里介紹的是computed在vue3中的新語法&#xff1a;…

std::iota(C++)

std::iota 1. 概述2. 函數原型3. 使用示例示例 1&#xff1a;填充 vector<int>示例 2&#xff1a;從非零起始值開始 4. 應用場景5. 注意事項6. 與其它算法比較小結 1. 概述 std::iota 定義在頭文件 中&#xff0c;C11 起引入。 它用于向前迭代器區間依次填入連續遞增的數…

基于Jaccard算法的用戶瀏覽歷史推薦商品系統實戰+springboot+vue源碼實現

大家好&#xff0c;這里是小羅畢設工作室。今天給大家帶來了一套完整的推薦系統&#xff1a; “基于Jaccard算法的用戶瀏覽歷史推薦商品系統”。 系統源碼后端實現是springboot&#xff0c;前端是vue3。 視頻演示 基于Jaccard算法的用戶瀏覽歷史推薦商品系統實戰 圖片截圖 算法…

正態分布和冪律分布

1. 背景與引入 正態分布 歷史來源&#xff1a;18世紀由高斯&#xff08;Gauss&#xff09;在研究測量誤差時提出&#xff0c;后被廣泛應用于自然現象和社會科學的數據建模。重要性&#xff1a;被稱為“鐘形曲線”&#xff0c;是統計學中最核心的分布之一&#xff0c;支撐中心極…

免費AI圖像編輯平臺,最新無損放大技術

軟件介紹 騰訊ARC網頁在線AI圖片處理是一款由騰訊ARC實驗室推出的在線圖像處理工具。憑借騰訊的科技實力&#xff0c;這款工具在圖像處理領域展現了卓越的性能。 功能亮點 這款在線圖像處理工具提供多種功能&#xff0c;包括人像修復、人像摳圖、動漫增強、萬物識別以及…

# 部署深度學習模型:Flask API 服務端與客戶端通信實戰

部署深度學習模型&#xff1a;Flask API 服務端與客戶端通信實戰 在這篇文章中&#xff0c;我們將探討如何使用 Flask 框架部署一個深度學習模型&#xff0c;并通過客戶端與服務端進行通信。我們將通過一個實際的例子&#xff0c;展示如何構建服務端和客戶端&#xff0c;以及如…

物理服務器緊急救援:CentOS系統密碼重置全流程實戰指南

前言 在企業IT運維實踐中&#xff0c;物理服務器密碼丟失是典型的"低概率高風險"事件。某金融科技公司曾因核心服務器密碼遺失導致業務中斷36小時&#xff0c;直接損失超過800萬元。這起真實案例揭示了系統密碼管理的關鍵性——當承載重要業務的物理服務器遭遇密碼丟…

【學習心得】好用算力平臺推薦OpenBayes“貝式計算”

好用是有定義的&#xff0c;我之前用過AutoDL和DAMODEL&#xff08;丹摩智算&#xff09;&#xff0c;我這里就不扯哪些我覺得不關鍵的因素。先不廢話直接給出導航鏈接以及CSDN上的官方主頁&#xff1a; OpenBayes官方網站https://openbayes.com/ OpenBayes官方CSDN賬號主頁h…

政務瀏覽器 一站式首頁功能配置說明

一、政務瀏覽器自定義首頁目的和意義 政務綜合窗口&#xff0c;通常需要打開諸多的業務系統進行受理和查詢&#xff1b;反復的錄入系統地址或者在收藏夾查找系統入口&#xff0c;影響辦事效率。政務瀏覽器為該場景設計了一款可定制的“首頁”。 “首頁”可以根據需要&#xff0…

linux nginx配置訪問目錄,訪問文件直接下載,linux配置nginx直鏈下載

很簡單的一個配置&#xff0c;不指定為啥&#xff0c;別人寫的都好麻煩&#xff0c;而且很多配置了也不行&#xff0c;明明就是幾句話的事啊&#xff0c;唉。 話不多說&#xff0c;直接上配置 worker_processes 1; events {worker_connections 1024; } http {include …

驅動開發硬核特訓 · Day 28(上篇):pinctrl 子系統詳解與實戰分析

&#x1f4da; 技術平臺&#xff1a;嵌入式Jerry&#xff08;B站&#xff09; 一、引言 在嵌入式系統中&#xff0c;SoC 芯片的引腳通常具有多種功能&#xff0c;如 GPIO、UART、I2C、SPI 等。為了在不同的應用場景中靈活配置引腳功能&#xff0c;Linux 內核引入了 pinctrl&am…

圖漾相機——Sample_V2示例程序(待補充)

文章目錄 1.SDK支持的平臺類型1.1 Windows 平臺1.2 Linux平臺 2.Sample_V2編譯流程2.1 Windows環境2.2 Linux環境編譯 3.Sample_V2示例程序測試3.1 ListDevice_v23.2 DepthStream_v23.3 ExposureTimeSetting_v23.4 ForceDeviceIP_v23.5 GetCalibData_v23.6 NetStatistic_v23.7 …

Google-chrome版本升級后sogou輸入法不工作了

背景&#xff1a; 筆記本Thinkpad E450&#xff0c;操作系統Ubuntu 24.04.2 LTS&#xff0c;Chrome瀏覽器版本135.0.7049.114-1&#xff0c;Edge瀏覽器版本131.0.2903.99-1&#xff0c;輸入法Sogou版本4.2.1.145 現象&#xff1a; - **正常場景**&#xff1a;Edge中可通過Ctrl…

7系列 之 OSERDESE2

背景 《ug471_7Series_SelectIO.pdf》介紹了Xilinx 7 系列 SelectIO 的輸入/輸出特性及邏輯資源的相關內容。 第 1 章《SelectIO Resources》介紹了輸出驅動器和輸入接收器的電氣特性&#xff0c;并通過大量實例解析了各類標準接口的實現。 第 2 章《SelectIO Logic Resource…

Ansible 流程控制

條件語句(判斷) 當滿足什么條件時&#xff0c;就執行那些tasks when 當...時ansible獲取主機名 # 主機名中&#xff0c;不包含.沒有區別 ansible_hostname # 包含.只顯示第一個.前面的名字 ansible_fqdn # 包含.顯示完整的主機名不管是shell還是各大編程語言中&#xf…

git命令積累(個人學習)

如何將docx文件不上傳&#xff1f; 創建或編輯 .gitignore 文件 打開 .gitignore 文件&#xff0c;添加以下內容來忽略所有 .docx 文件&#xff1a; *.docx清除已追蹤的 .docx 文件 git rm --cached "*.docx"這將從 Git 倉庫中刪除 .docx 文件&#xff0c;但不會刪…

springboot應用大批量導出excel產生oom處理措施實踐(適用于poieasyexcel)

一、背景&#xff1a; 在某些信息管理場景中&#xff0c;存在大批量導出需求&#xff0c;例如一次性導出10~100w行excel數據&#xff0c;如果不做特殊的處理&#xff0c;很容易導致Out Of Memory&#xff0c;特別是堆內存溢出。 oom復現 例如修改IDEA運行配置&#xff0c;VM…

谷歌在即將舉行的I/O大會之前,意外泄露了其全新設計語言“Material 3 Expressive”的細節

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…