Java基礎知識-線程池

1、為什么要用線程池?

創建線程要花費昂貴的資源和時間,如果任務來了才創建線程那么響應時間會變長,而且一個進程能創建的線程數 有限。為了避免這些問題,在程序啟動的時候就創建若干線程來響應處理,它們被稱為線程池,里面的線程叫工作線程。

從JDK1.5 開始,JavaAPI 提供了 Executor 框架讓你可以創建不同的線程池。比如單線程池,每次處理一個 任務;數目固定的線程池或者是緩存線程池。

2、? 如何創建線程池?

線程池都是通過線程池工廠創建,再調用線程池中的方法獲取線程,再通過線程去執行任務方法。 Executors:線程池創建工廠類

1.? 自己根據創建線程池的需求來 new 對象(使用) 注意:線程池不允許使用 Executors 去創建,而是通過 ThreadPoolExecutor 的方式,這樣的處理方式讓寫的同學更加明確線程池的運行規則,規避資源耗盡的風險。 說明:Executors 返回的線程池對象的弊端如下: 1)FixedThreadPool 和 SingleThreadPool:允許的請求隊列長度為 Integer.MAX_VALUE,可能會堆積大量的請求,從而導致OOM。 2)CachedThreadPool 和 ScheduledThreadPool:允許的創建線程數量為 Integer.MAX_VALUE,可能會創建大量的線程,從而導致 OOM。

建議自己通過 new 關鍵字創建 newThreadPoolExecutor

3創建線程池方法

newFixedThreadPool():該方法返回一個固定線程數量的線程池。該線程池中的線程數量始終不變。當有一個新任務提交時,如果線程池中存在空閑的線程,則立即執行;如果沒有,則新任務會被暫時存在一個任務隊列中,待有線程空閑時再進行處理。

newSingleThreadExecutor(): 該方法返回一個只有一個線程的線程池。若多個任務被提交到該線程池,則多余的任務會被保存在一個任務隊列中,待線程空閑,按照先入先出的順序被執行。

newCachedThreadPool():根據實際情況動態調整線程數量。當新任務提交時,會優先復用空閑的線程;如果所有線程均處于工作狀態,則會創建新的線程來進行處理。

newSingleThreadScheduledExecutor():該方法返回一個 ScheduledExecutorService 對象,線程池大小為 1 。SeheduledExectorService 在繼承 ExecutorService 的基礎上還額外支持定時任務的執行。

newScheduledThreadPool():與 newSingleThreadScheduledExecutor 方法類似,但可以指定線程池中線程的數量。

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

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

相關文章

使用pywinauto自動重連easyconnect

啟動easyconnect后,運行該腳本,實現自動重連。需要填一下連接的地址,用戶名和密碼(替換一下腳本里的xxx) from pywinauto import application from pywinauto import timings import time# 初始化應用程序對象 app1 application.Applicatio…

2710. 移除字符串中的尾隨零 Easy

給你一個用字符串表示的正整數 num ,請你以字符串形式返回不含尾隨零的整數 num 。 示例 1: 輸入:num "51230100" 輸出:"512301" 解釋:整數 "51230100" 有 2 個尾隨零,移…

idea2024使用springboot3.x系列新建java項目,使用jdk17,啟動項目報錯

身為一名開發人員,敲代碼無數,竟被一個小小啟動給我卡了大半天,太丟臉了 報錯一:Field infoSysRepository in com.erectile.Impl.PersonalInfoServiceImpl required a bean of type ‘com.erectile.jpa.repository.InfoSysReposit…

Spring:Spring中分布式事務解決方案

一、前言 在Spring中,分布式事務是指涉及多個數據庫或系統的事務處理,其中事務的參與者、支持事務的服務器、資源管理器以及事務管理器位于分布式系統的不同節點上。這樣的架構使得兩個或多個網絡計算機上的數據能夠被訪問并更新,同時將這些操…

使用通用的響應格式

使用泛型響應類&#xff08;或者類似的響應封裝類&#xff09;在網絡編程和API設計中有很多好處&#xff0c;包括但不限于以下幾點&#xff1a; 統一響應格式&#xff1a; 使用R<T>可以確保API的所有響應都遵循相同的格式&#xff0c;這有助于客戶端更容易地解析和處理響…

IP地址與在線教育平臺資源分配優化

IP地址的資源分配與優化策略可以幫助在線教育平臺提供更高質量、穩定且個性化的教育服務。 IP地址作為網絡設備的標識符&#xff0c;能夠為在線教育平臺提供有關學生地理位置和網絡環境信息。通過對學生IP地址的分析&#xff0c;平臺可以初步了解學生所在的地區、網絡服務提供商…

回收站的照片刪除了怎么找回?

大家在日常使用電腦的過程中&#xff0c;難免會遇到不小心刪除重要文件的情況&#xff0c;尤其是珍貴的照片。當我們意識到誤刪照片時&#xff0c;第一反應通常是去回收站找回。然而&#xff0c;如果連回收站的照片都被刪除了&#xff0c;該如何恢復呢&#xff1f;本文將詳細探…

【MySQL】事務的快照生成時間點和薛定諤的貓相關?

概述 最近因為工作需要&#xff0c;對MySQL的事務處理進行了一系列測試驗證&#xff0c;其中&#xff0c;對于MySQL的事務到底時什么時候生成了數據的快照&#xff0c;結果似乎跟薛定諤的貓理念很像&#xff0c;很有意思&#xff1b;過程我貼出來&#xff0c;有興趣的朋友可以一…

Python提供API給JAVA調用,實現Python和Java之間的交互

一、Java 調用Python 提供的API接口&#xff0c;有多種方法&#xff0c;本文通過Python 提供的Rest API進行調用 二、在Python中創建一個REST API&#xff0c;你可以使用許多框架&#xff0c;其中兩個最流行的框架是Flask和Django REST framework。這兩個框架都提供了創建REST…

Dockerfile詳情,Django項目中使用Dockerfile

Dockerfile詳情&#xff0c;Django項目中使用Dockerfile 目錄 Dockerfile詳情&#xff0c;Django項目中使用Dockerfile介紹常用指令Dokcerfile部署Django項目安裝Docker獲取項目源碼Dockerfile文件構建Docker鏡像運行Docker容器 介紹 Dockerfile是一個文本文件&#xff0c;一般…

simulink開發stm32,使用中斷模塊,無法產生中斷,其中包括使用timer模塊,以及ADC都無法產生中斷,需要注意的地方

1&#xff0c;其中包括使用timer模塊&#xff0c;以及ADC都無法產生中斷&#xff0c;需要注意的地方 原來是需要在配置文件里開啟一下timer的中斷&#xff0c;其他模塊自動加載ioc就可以了&#xff0c;這個timer需要注意力&#xff0c;需要自己勾選一下 如下圖&#xff1a; 看…

提升 Selenium 測試穩定性的秘訣:深入理解等待 API 的使用

目錄 為什么需要等待Selenium 等待 API 簡介隱式等待顯式等待Fluent Wait等待策略的選擇示例代碼總結 正文 1. 為什么需要等待 在 Web 自動化測試中&#xff0c;等待是一個關鍵因素。網絡應用通常是動態的&#xff0c;頁面加載時間、元素的顯示時間都可能不同步。直接操作這…

致敬經典:在國產開源操作系統 RT-Thread 重溫 UNIX 彩色終端

引言 上篇文章里我們向大家介紹了 RT-Thread v5.1.0 的一些新特性。其中包括了終端環境的進一步完善。終端是人機交互的重要接口。實用的終端工具可以顯著地提升系統使用者的幸福指數。舉例來說&#xff0c;當我們想要修改一些系統配置&#xff0c;或是編寫腳本時&#xff0c;一…

Linux——echo命令,管道符,vi/vim 文本編輯器

1.echo 命令 作用 向終端設備上輸出字符串或變量的存儲數據 格式 echo " 字符串 " echo $ 變 量名 [rootserver ~] # echo $SHELL # 輸出變量的值必須加 $ /bin/bash [rootserver ~] # str1" 我愛中國 " # 自定義變量 echo 重定向輸出到文件 ec…

MySQL數據庫——在Centos7環境安裝

MySQL在Centos7環境安裝 1.切換root用戶 安裝與卸載中&#xff0c;用戶全部切換成為root&#xff0c;安裝好后&#xff0c;普通用戶也能使用 2.卸載不要的環境 要將自己環境中有關mysql的全都刪除&#xff0c;避免安裝過程中被影響 ps axj | grep mariadb 先檢查是否有mari…

近似最近鄰查找的幾種方法

近似最近鄰查找 定義主要方法1. 局部敏感哈希&#xff08;LSH&#xff09;2. KD樹&#xff08;k-d tree&#xff09;3. 球樹&#xff08;Ball Tree&#xff09;4. 隨機投影樹&#xff08;Random Projection Trees&#xff09;5. 圖結構方法&#xff08;Graph-Based Methods&…

自制全網最便宜的雷達感應燈光畫,成本只需5元

自制全網最便宜的雷達感應燈光畫&#xff0c;成本5元 ? 成本組成&#xff1a;帶熱釋電的人體感應燈&#xff08;0.5元&#xff09;雷達感應模塊&#xff08;3.5元&#xff09;首飾盒&#xff08;0.45元&#xff09;微噴油畫布&#xff08;1元&#xff09;5.45元 ? 說一下做燈…

Flutter學習:從搭建環境到運行

一、開發環境的搭建 本文所示內容都是在Windows系統下進行的。 1、下載 Flutter SDK Flutter 官網&#xff08;https://docs.flutter.cn/release/archive?tabwindows&#xff09; 或者通過 git clone -b master https://github.com/flutter/flutter.git 下載 2、配置環境…

[數據集][目標檢測]井蓋未蓋好檢測數據集VOC+YOLO格式20123張2類別

數據集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路徑的txt文件&#xff0c;僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數)&#xff1a;20123 標注數量(xml文件個數)&#xff1a;20123 標注數量(txt文件個數)&#xff1a;20123 標…

Gamepad API 控制游戲的 JavaScript 指南

在現代網頁游戲中&#xff0c;通過游戲手柄來控制游戲是一種常見的需求。HTML5 提供了一個名為 Gamepad API 的接口&#xff0c;使得從瀏覽器中讀取游戲手柄輸入變得相對簡單。 什么是 Gamepad API&#xff1f; Gamepad API 是 HTML5 的一部分&#xff0c;允許開發者通過 Jav…