【Java EE初階 --- 多線程(進階)】JUC

樂觀學習,樂觀生活,才能不斷前進啊!!!

我的主頁:optimistic_chen

我的專欄:c語言 ,Java

歡迎大家訪問~
創作不易,大佬們點贊鼓勵下吧~

文章目錄

  • JUC組件
    • ReentrantLock與synchronized的區別
    • Semaphore信號量
    • CountDownLatch
  • 線程安全的集合類
    • 多線程環境下使用ArrayList
    • 多線程環境下使用隊列
    • 多線程使用Hash表
  • 完結

JUC組件

JUC( java.util.concurrent ) :是和多線程相關的工具。

Callable接口與之前的Runnable接口是并列關系,二者的主要區別在于對程序運行結果的獲取
在這里插入圖片描述

但是Thread的構造方法沒有提供版本去傳入Callable對象: Thread只是一個線程,它的重點在于完成任務,而不是獲取到完成任務后的結果。
在這里插入圖片描述
如果我們想要得到任務完成后的結果,需要有一個“中間人”幫助。
在這里插入圖片描述
FutureTask就是這個中間人,它獲取到任務的結果,在把它交給線程,由線程來獲取FurtureTask對象,即拿到任務結果。

ReentrantLock與synchronized的區別

首先都是可重入鎖

區別:
1. synchronized是關鍵字,通過JVM內部C++實現的;ReentrantLack是Java標準庫的類
2. synchronized通過代碼塊控制加鎖解鎖;ReentrantLock需要lock/unlock方法
3. ReentrantLock還有tryLock()方法,判斷加鎖成功返回true,加鎖失敗返回false(不會阻塞)
4. ReentrantLock提供了公平鎖的效果。(默認非公平)
5. ReentrantLock搭配的等待通知機制,是Condition類。相比較wait notify來說更加強大
在這里插入圖片描述

Semaphore信號量

本質:協調多個進程(線程)之間的資源分配,可以理解為計數器:描述資源的個數
申請一個資源,計數器-1 — P操作
釋放一個資源,計數器+1 — V操作

在這里插入圖片描述
信號量初始值為1的情況,取值要么是1,要么是0:等價于鎖

在這里插入圖片描述

CountDownLatch

我們使用多線程的目的是為了提高重程序運行效率,通過把一個大任務分解為多個小人物來實現,使用多個線程來解決這些小任務,從而完成大任務。那么我們如何得知,這個大任務什么時候完成?

1. 構造方法指定一個參數,描述一個拆分了多少個任務
2. 每個任務執行完成后,都調用一次countDown方法
3. 主線程重調用await方法,等待所有任務執行完畢,await返回/阻塞等待

在這里插入圖片描述

線程安全的集合類

多線程環境下使用ArrayList

  1. 自己加鎖:具體情況,具體分析
  2. Collection.synchronizedList(new ArrayList)提前嵌套,返回的List的各種關鍵方法都是帶有synchronized
  3. 使用CopyOnWriteArrayList(寫時拷貝),不用鎖

多線程環境下使用隊列

1. ArrayBlockQueue:基于數組實現的阻塞隊列
2. LinkedBlockingQueue:基于鏈表實現的阻塞隊列
3. PriorityBlockingQueue:基于堆實現的帶優先級的阻塞隊列
4. TransferQueue:最多只含有一個元素的阻塞隊列

多線程使用Hash表

HashMap線程不安全
Hashtable線程安全(給public方法都加了synchronized)

ConcurrentHashMap線程安全,效率更高
因為它是按照桶級別進行加鎖,而不是給hash加一個全局鎖,降低鎖沖突概率
優化點:
1. 把鎖整個hash表 優化 為鎖桶
2. 使用原子類針對size進行維護
3. hash擴容時,化整為零

完結


可以點一個免費的贊并收藏起來~
可以點點關注,避免找不到我~ ,我的主頁:optimistic_chen
我們下期不見不散 ~ ~ ~

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

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

相關文章

免費靜態網站搭建

免費靜態網站搭建 內容簡介搭建步驟GitHub倉庫創建Jekyll安裝使用Jekyll安裝指南Jekyll快速搭建測試Jekyll后續玩法 內容簡介 🚩Tech Contents:GithubPage/Jekyll/Custom URLs 🐱GitHub Pages:靜態網站托管服務,自動將…

MySQL 8.0 OCP 1Z0-908 題目解析(21)

題目81 Choose two. Examine the modified output: mysql> SHOW SLAVE STATUS\G *************************** 1. row ***************************Slave_IO_Running: YesSlave_SQL_Running: YesSeconds_Behind_Master: 1612Seconds_Behind_Master value is steadily gro…

Web前端開發-HTML、CSS

文章目錄是什么?HTML快速入門VS Code開發工具基礎標簽&樣式新浪新聞-標題標題排版標題樣式標題樣式-1標題樣式-2超鏈接新浪新聞-正文新浪新聞-正文排版新浪新聞-頁面布局表格標簽表單標簽表單標簽-表單項是什么? HTML快速入門 VS Code開發工具 基礎標…

Vue.js狀態管理: Vuex在大型項目中的實際應用

# Vue.js狀態管理: Vuex在大型項目中的實際應用 ## 一、Vuex核心架構與大型項目適配 ### 1.1 狀態管理(State Management)的本質需求 在復雜前端系統中,組件間的數據傳遞成本隨項目規模呈指數級增長。根據Vue官方統計,超過500個組…

C++開發:結構體作為函數形參的值傳遞與引用傳遞

筆者定義了一個結構體變量,用于作為函數的形參,定義如下:struct CardParameters {float* Average nullptr;int averageSize 0; }; 需求描述:結構體變量作為函數的形參,在函數體中給指針變量分配內存空間并賦值&#…

【unity小技巧】在 Unity 中將 2D 精靈添加到 3D 游戲中,并實現陰影投射效果,實現類《八分旅人》《饑荒》等等的2.5D游戲效果

注意:考慮到unity小技巧的內容比較多,我將該內容分開,并全部整合放在【unity小技巧】專欄里,感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言實戰1、在3D場景中,新建一些不同形狀的2D圖片2、我們新建一個Lit材質3…

Rust 內存結構:深入解析

Rust 的內存管理系統是其核心特性之一,結合了手動內存管理的效率與自動內存管理的安全性。以下是 Rust 內存結構的全面解析: 內存布局概覽 ----------------------- | 代碼段 (Text) | 只讀,存儲可執行指令 ----------------------…

【Chrome】‘Good助手‘ 擴展程序使用介紹

這是我開發的一款 Chrome 瀏覽器擴展程序,目前主要集成了‘AI對話‘,’總結頁面’,‘基于頁面問答’等功能,最近幾天我也將寫一篇介紹如何開發 chrome 擴展程序的博客,帶你了解如何開發屬于自己的插件。 注&#xff1…

基于mysql8.0.27部署1主2從的MHA集群

目錄 一、mysql概述 1.1、關系型數據庫 1.2、MySQL數據庫 1.3、RDBMS術語 二、mysql的部署 2.1、拉取mysql 2.2、解壓 2.3、 改名 2.4、 指定安裝文件位置 2.5、 創建用戶組 2.6、 修改mysql配置文件 2.7、創建data文件夾 2.8、更改mysql目錄權限 2.9、初始化數據…

Highcharts 安裝使用教程

一、Highcharts 簡介 Highcharts 是一款使用 JavaScript 編寫的前端數據可視化庫,支持折線圖、柱狀圖、餅圖、面積圖、散點圖等多種圖表類型,特點是渲染性能優秀、交互豐富、兼容性強,適合構建商業圖表、統計報表等。 二、Highcharts 安裝方…

Qt中的坐標系

Qt中的坐標系 1.坐標系概念2.數學坐標系VS計算機坐標系3.Qt坐標系4.像素 🌟🌟hello,各位讀者大大們你們好呀🌟🌟 🚀🚀系列專欄:【Qt的學習】 📝📝本篇內容&am…

C++原子類型操作與內存序

C原子類型操作與內存序詳解 這段內容深入介紹了C標準原子類型的操作接口、內存序語義及使用規范。以下是關鍵知識點的分層解析&#xff1a; 一、原子類型的命名規則與類型映射 C提供兩種方式表示原子類型&#xff1a; 模板特化形式&#xff1a;std::atomic<T>別名形式…

互聯網摸魚日報(2025-07-07)

互聯網摸魚日報(2025-07-07) 鈦媒體 一場突如其來的“召回潮”&#xff0c;點燃中國制造的“靈魂拷問” 史上最大外賣補貼戰開打&#xff0c;美團聚攏資源迎戰“巨無霸” 1315億加冕潮汕女首富&#xff0c;“最強打工妹”劍指港股 用14346字&#xff0c;講透上市前必做的10…

七牛云Java開發面試題及參考答案

詳述 Java 方法重載的機制與應用場景 Java 方法重載&#xff08;Method Overloading&#xff09;是面向對象編程中的重要特性&#xff0c;它允許同一個類中存在多個同名但參數列表不同的方法。這種機制為代碼提供了靈活性和可讀性&#xff0c;使得開發者可以用統一的方法名處理…

.net core mvc部署到win10本地的Ubuntu上

將一個 .NET Core MVC 應用部署到 Windows 10 上通過 WSL 安裝的 Ubuntu 環境中&#xff0c;可以分為幾個步驟來完成。以下是詳細的指南&#xff1a;準備工作確保你的Ubuntu環境已安裝.NET SDK&#xff1a;首先&#xff0c;你需要在WSL中的Ubuntu上安裝.NET SDK。可以通過以下命…

機器人VLA模型(Vision-Language-Action)

一、VLA模型的技術架構與核心原理 VLA&#xff08;Vision-Language-Action&#xff09;模型的核心是構建視覺、語言、動作的多模態閉環系統&#xff0c;實現從感知到執行的端到端映射。其技術架構可細分為四個關鍵模塊&#xff1a; 1. 多模態編碼器 視覺編碼器&#xff1a; …

單點登錄SSO的演進和最佳實踐,含springBoot 實現(Java版本)

一、單點登錄&#xff08;SSO&#xff09;概述 單點登錄&#xff08;SSO, Single Sign-On&#xff09;是一種認證機制&#xff0c;允許用戶只需登錄一次&#xff0c;即可訪問多個相互信任的系統或應用&#xff0c;而不需要為每個系統重復登錄。 二、SSO 演進路徑 我們可以從以…

Python----OpenCV(圖像増強——高通濾波(索貝爾算子、沙爾算子、拉普拉斯算子),圖像浮雕與特效處理)

一、 高通濾波 高通濾波是對圖像進行卷積操作&#xff0c;以保留圖像中的快速變化部分&#xff08;如邊緣和細節&#xff09;&#xff0c;同時抑 制低頻分量&#xff08;如大面積平坦區域&#xff09;。 應用場景 邊緣檢測&#xff1a;提取物體輪廓和邊界。特征提取&#xff…

oracle 恢復

RECOVER DATABASE USING BACKUP CONTROLFILE “用備份的控制文件推動數據庫恢復”。-- 檢查控制文件記錄的當前SCN (V$DATABASE) SELECT CURRENT_SCN FROM V$DATABASE; -- 檢查數據文件頭SCN (V$DATAFILE_HEADER) SELECT FILE#, CHECKPOINT_CHANGE# FROM V$DATAFILE_HEADER;-…

京東商品詳情SKU數據采集的難點有哪些?

京東商品詳情 SKU 數據采集過程中&#xff0c;由于平臺的技術防護、數據結構特性及合規性要求&#xff0c;會面臨諸多難點&#xff0c;具體如下&#xff1a;一、反爬蟲機制的限制京東作為大型電商平臺&#xff0c;擁有成熟且嚴格的反爬蟲系統&#xff0c;這是采集時最核心的障礙…