B100-技能提升-線程池分布式鎖

目錄

      • 線程池
        • 什么是線程池?
        • 為什么用線程池?
        • 線程池原理
        • 常見四種線程池和自定義線程池

線程池

什么是線程池?

池化技術

為什么用線程池?

1 由于設置最大線程數,防止線程過多而導致系統崩潰。

2 線程復用,不需要頻繁創建或銷毀線程,并且銷毀和創建是耗費時間和資源操作,所以提高了效率,節約資源。

線程池原理

在這里插入圖片描述
核心線程,等待隊列,非核心線程,拒絕策略

如果有空閑的線程直接使用,沒有空閑的線程并且線程數量未達到corePoolSize,則新建一個線程(核心線程)執行任務

線程數量達到了corePoolSize,則將任務移入隊列等待空閑線程將其取出去執行(通過getTask() 方法從阻塞隊列中獲取等待的任務,如果隊列中沒有任務,getTask()方法會被阻塞并掛起,不會占用cpu資源,整個getTask操作在自旋下完成)

隊列已滿,新建線程(非核心線程)執行任務,空閑下來以后,非核心線程會按照時間策略進行銷毀

隊列已滿,總線程數又達到了maximumPoolSize,就會執行任務拒絕策略。

handler:表示當拒絕處理任務時的策略(①AbortPolicy丟棄任務并拋出RejectedExecution異常;②DiscardPolicy丟棄任務,但是不拋出異常;③DiscardOldestPolicy丟棄隊列最前面的任務,然后重新嘗試執行任務;④CallerRunsPolicy由調用線程處理該任務)

常見四種線程池和自定義線程池

見文檔

代碼

PoolTest1

public class PoolTest1 {public static void main(String[] args) {
//        ExecutorService executorService1 = Executors.newCachedThreadPool();
//        ExecutorService executorService2 = Executors.newFixedThreadPool(5);
//        ExecutorService executorService3 = Executors.newSingleThreadExecutor();
//        ScheduledExecutorService executorService4 = Executors.newScheduledThreadPool(5);ThreadPoolExecutor executorService = new ThreadPoolExecutor(5, 10, 5, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10), new ThreadPoolExecutor.AbortPolicy());// 執行任務-線程不用我們創建,交給線程池管理,只需要把執行邏輯放進去就OKfor (int i = 0; i < 20; i++) {int finalI = i;executorService.execute(new Runnable() {@Overridepublic void run() {System.out.println("Thread Name: "+Thread.currentThread().getName()+"  I="+ finalI);try {Thread.sleep(5*1000);} catch (InterruptedException e) {e.printStackTrace();}}});}executorService.shutdown();}
}

MyTask

public class MyTask implements Callable<String>  {private Integer integer1;private Integer integer2;public MyTask(Integer integer1,Integer integer2){this.integer1 =integer1;this.integer2 =integer2;}@Overridepublic String call() throws Exception {int i = integer1 + integer2;return "Thread name:" + Thread.currentThread().getName()+"  i="+i;}
}

PoolTest2

public class PoolTest2 {public static void main(String[] args) throws ExecutionException, InterruptedException {
//        ExecutorService executorService1 = Executors.newCachedThreadPool();
//        ExecutorService executorService2 = Executors.newFixedThreadPool(5);
//        ExecutorService executorService3 = Executors.newSingleThreadExecutor();
//        ScheduledExecutorService executorService4 = Executors.newScheduledThreadPool(5);ThreadPoolExecutor executorService = new ThreadPoolExecutor(5, 10, 5, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10), new ThreadPoolExecutor.AbortPolicy());// 執行任務-線程不用我們創建,交給線程池管理,只需要把執行邏輯放進去就OKArrayList<Future<String>> futures = new ArrayList<>();for (int i = 0; i < 20; i++) {MyTask myTask = new MyTask(3,4);Future<String> future = executorService.submit(myTask);// future.get()為myTask.call()的返回值futures.add(future);}List<String> resutlts = new ArrayList<>();for (int i = 0; i < futures.size(); i++) {String resutlt = futures.get(i).get();resutlts.add(resutlt);}System.out.println("===="+resutlts.get(19));executorService.shutdown();}
}

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

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

相關文章

包管理機制pip3

pip3 安裝pip3 安裝pip3 apt install python3-pip yum install python3-pip從倉庫出發的命令 查詢倉庫信息 // 獲取默認pip3源 pip3 config get global.index-url查詢所有軟件包 查詢已經安裝的所有軟件包 pip3 list從軟件包出發的命令 從軟件包名出發查詢其他信息 查詢…

230. 二叉搜索樹中第K小的元素

介紹 中序遍歷&#xff1a;左子樹 -> 中 -> 右子樹 二叉搜索樹&#xff1a;中序遍歷可以得到有序的序列 遞歸法 1.使用函數循環遞歸處理 2.使用一個數組來保存 k, 保證在個個遞歸函數中都能看到 看的變化&#xff1b;每訪問一個節點&#xff0c;這個數減一&#xff0c…

軟件測試基礎篇——Redis

Redis Redis數據庫的配置與連接 解壓redis數據庫的安裝包&#xff08;建議把解壓后的安裝包放到磁盤的根目錄&#xff0c;方便訪問操作&#xff09;打開【命令行窗口】&#xff1a;winR在命令行窗口&#xff0c;進入到redis安裝目錄中 ? 格式一&#xff1a;cd /d redis目錄…

Linux安裝Zookeeper

1、Zookeeper簡介 ZooKeeper是一個分布式的&#xff0c;開放源碼的分布式應用程序協調服務&#xff0c;是Google的Chubby一個開源的實現&#xff0c;是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件&#xff0c;提供的功能包括&#xff1a;配置維護、域…

自然語言處理從入門到應用——LangChain:記憶(Memory)-[記憶的類型Ⅲ]

分類目錄&#xff1a;《自然語言處理從入門到應用》總目錄 對話令牌緩沖存儲器ConversationTokenBufferMemory ConversationTokenBufferMemory在內存中保留了最近的一些對話交互&#xff0c;并使用標記長度來確定何時刷新交互&#xff0c;而不是交互數量。 from langchain.me…

基于灰狼優化(GWO)、帝國競爭算法(ICA)和粒子群優化(PSO)對梯度下降法訓練的神經網絡的權值進行了改進(Matlab代碼實現)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

環保行業如何開發廢品回收微信小程序

廢品回收是近年來受到越來越多人關注的環保行動。為了推動廢品回收的普及和方便&#xff0c;我們可以利用微信小程序進行制作&#xff0c;方便人們隨時隨地參與廢品回收。 首先&#xff0c;我們需要注冊并登錄喬拓云賬號&#xff0c;并進入后臺。喬拓云是一個提供微信小程序制作…

數據結構(一):順序表詳解

在正式介紹順序表之前&#xff0c;我們有必要先了解一個名詞&#xff1a;線性表。 線性表&#xff1a; 線性表是&#xff0c;具有n個相同特性的數據元素的有限序列。常見的線性表&#xff1a;順序表、鏈表、棧、隊列、數組、字符串... 線性表在邏輯上是線性結構&#xff0c;但…

【云原生】Pod詳講

目錄 一、Pod基礎概念1.1//在Kubrenetes集群中Pod有如下兩種使用方式&#xff1a;1.2pause容器使得Pod中的所有容器可以共享兩種資源&#xff1a;網絡和存儲。1.3kubernetes中的pause容器主要為每個容器提供以下功能&#xff1a;1.4Kubernetes設計這樣的Pod概念和特殊組成結構有…

Django中級指南:理解并實現Django的模型和數據庫遷移

Django 是一個極其強大的 Python Web 框架&#xff0c;它提供了許多工具和特性&#xff0c;能夠幫助我們更快速、更便捷地構建 Web 應用。在本文中&#xff0c;我們將會關注 Django 中的模型&#xff08;Models&#xff09;和數據庫遷移&#xff08;Database Migrations&#x…

上傳代碼到GitCode

Git 全局設置 git config --global user.name "AnyaPapa" git config --global user.email "fangtaihongqq.com" 添加SSH密鑰 Mac終端輸入命令 cd existing_folder git init git remote add origin gitgitcode.net:Java_1710/test.git git add . git co…

2023國賽數學建模A題思路分析

文章目錄 0 賽題思路1 競賽信息2 競賽時間3 建模常見問題類型3.1 分類問題3.2 優化問題3.3 預測問題3.4 評價問題 4 建模資料 0 賽題思路 &#xff08;賽題出來以后第一時間在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 競賽信息 全國大學生數學建模…

Mac電腦如何把照片以文件格式導出?

在Mac電腦上&#xff0c;我們經常會拍攝、保存和編輯各種照片。有時候&#xff0c;我們可能需要將這些照片以文件形式導出&#xff0c;以便與他人共享、打印或備份。無論您是要將照片發送給朋友、上傳到社交媒體&#xff0c;還是保存到外部存儲設備&#xff0c;導出照片為文件是…

我的Python教程:使用Pyecharts畫柱狀圖

Pyecharts是一個用于生成 Echarts 圖表的 Python 庫。Echarts 是一個基于 JavaScript 的數據可視化庫&#xff0c;提供了豐富的圖表類型和交互功能。通過 Pyecharts&#xff0c;你可以使用 Python 代碼生成各種類型的 Echarts 圖表&#xff0c;例如折線圖、柱狀圖、餅圖、散點圖…

java不支持解壓rar5的解決辦法--引用本地7zip.exe

由于rar5算法未開源&#xff0c;沒有合適的JAVA依賴能夠解決解壓rar5。在運行中報錯&#xff1a; javacom.github.junrar.exception.RarException: badRarArchive 通過引用本地7zip.exe&#xff0c;命令行執行解決&#xff1a; private static void unZipRar5File(String fileP…

探索可視化應用的嶄新前景

在當今數據驅動的世界中&#xff0c;可視化應用成為了一種強大的工具&#xff0c;能夠將復雜的數據轉化為易于理解和分析的圖形形式。隨著技術的不斷發展和創新&#xff0c;可視化應用正迎來嶄新的前景。本文將介紹可視化應用的定義、重要性以及當前的發展趨勢&#xff0c;并探…

Controller是單例還是多例?

Controller是單例還是多例&#xff1f; controller默認是單例的&#xff0c;不要使用非靜態的成員變量&#xff0c;否則會發生數據邏輯混亂。正因為單例所以不是線程安全的。 我們下面來簡單的驗證下&#xff1a; package com.riemann.springbootdemo.controller;import org…

docker配置文件

/etc/docker/daemon.json 文件作用 /etc/docker/daemon.json 文件是 Docker 配置文件&#xff0c;用于配置 Docker 守護進程的行為和參數。Docker 守護進程是負責管理和運行 Docker 容器的后臺進程&#xff0c;通過修改 daemon.json 文件&#xff0c;可以對 Docker 守護進程進…

不做Linux就沒前途嗎?

答案當然是——并不會 我晚上回來的時候跟一個今年的畢業生聊天&#xff0c;他入職了一家公司&#xff0c;但是從事的不是Linux相關的工作。 我這里想說的是&#xff0c;做Linux可以賺錢&#xff0c;Linux現在是全世界最牛逼的開源項目一點都不為過&#xff0c;但是Linux也不是…