tag

標籤
貢獻17
80
05:55 PM · Oct 25 ,2025

@鎖 / 博客 RSS 訂閱

異常君 - 深入剖析 Java ReentrantLock:解鎖顯式鎖的高級特性與實戰應用

一、鎖的進化:從 synchronized 到 ReentrantLock 大家好,在多線程編程中,鎖機制是保證線程安全的核心技術。Java 早期只提供了 synchronized 這一種內置鎖,而在 JDK 1.5 後,Doug Lea 大師為我們帶來了更加靈活強大的顯式鎖ReentrantLock。 synchronized 雖然用起來簡單,但在某些場景下會顯得"能力不足": 無法響應中斷

lock , , JAVA , 後端

收藏 評論

異常君 - Java 鎖進化論:synchronized 的底層原理與鎖優化技術詳解

在多線程編程中,synchronized是 Java 中最基礎也最重要的同步機制之一。雖然它在 JDK 早期版本中因性能問題被詬病,但隨着 JDK 1.6 引入的鎖優化技術,它已經成為兼具性能和易用性的同步方案。本文將深入剖析 synchronized 的底層原理、鎖升級過程以及 JVM 對它的各種優化措施。 一、synchronized 的三種使用形式 在深入原理前,先回顧一下 synchron

lock , , JAVA , synchronized , 後端

收藏 評論

xiaohe0601 - 🔒 JavaScript 不是單線程嗎?怎麼還能上“鎖”?!

在 JavaScript 日常開發中,經常會遇到這樣的情況:多個異步任務需要同時訪問或修改同一個資源。這個資源可能很簡單,比如內存中的一個變量;也可能複雜一些,比如一份配置文件、一條數據庫記錄或者是某個外部服務的接口調用,只要它是共享的,就有可能被不同的任務同時操作。 問題在於,異步任務不像同步代碼那樣一行一行地按順序執行,而是可能同時進行。如果沒有任何機制來協調它們的先後順序,就會出現混亂:有的

插件 , , 異步 , 前端 , Javascript

收藏 評論

異常君 - Java併發問題排查實戰手冊:死鎖與活鎖診斷與解決全流程

一、引言 併發編程就像是在廚房裏同時炒 10 道菜 - 看似效率提高了,但一不小心就會手忙腳亂。作為 Java 後端開發,我們經常為併發問題頭疼不已:生產環境突然卡死,線程 CPU 使用率飆升卻沒有業務進展,各種監控工具報警...而當你想復現問題時,它又像幽靈一樣"按鬧分配",讓人抓狂。 併發 BUG 難以排查的原因主要有三: 不確定性:同樣的代碼,運行 10 次可能只出現 1 次問題 複雜

實戰 , , JAVA , 併發 , 後端

收藏 評論

愛可生開源社區 - MySQL 在 RC 隔離級別插入記錄,唯一索引衝突加什麼鎖?

對比上一篇,這篇聊聊【讀已提交】隔離級別下,唯一索引衝突怎麼加鎖。 作者:操盛春,愛可生技術專家,公眾號『一樹一溪』作者,專注於研究 MySQL 和 OceanBase 源碼。 愛可生開源社區出品,原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 本文基於 MySQL 8.0.32 源碼,存儲引擎為 InnoDB。 目錄 [TOC] 正文 1. 準備工作 創建測試表: CR

MySQL , innodb , , 數據庫 , 事務

收藏 評論

Zeran - Mysql工作面試老大難——鎖

解決併發事務帶來問題的兩種基本方式 併發事務訪問相同記錄的情況可以劃分為3種。 讀 - 讀情況:併發事務相繼續讀取相同的記錄。讀取操作本身不會對記錄有任何影響,不會引起什麼問題,所以允許這種情況的發生。 寫 - 寫情況:併發事務相繼對相同的記錄進行改動。 讀 - 寫或寫 - 讀情況:也就是一個事務進行讀取操作,另一個事務進行改動操作。 寫 - 寫情況 在寫 - 寫情況下會發生髒寫的現象,

MySQL , innodb , , mysql優化

收藏 評論

jump__jump - 聊聊併發控制鎖

對於企業應用來説,完全不涉及到併發的問題,基本是不可能的。因為對於一個應用中很多的事情都是同時進行的。併發可能發生在數據獲取,服務調用乃至於用户交互中。併發問題有兩個重要的解決方案,一個是隔離,另一個是不變性。 併發問題會發生在多個執行單元同時訪問同一資源的時候,此時,一個好的方法就是分好“蛋糕”,讓每一個執行單元都能訪問到各自的資源。好的併發設計就是:找到創建好隔離區的辦法,然後通過分析工作流讓

樂觀鎖 , , 前端優化 , 併發 , Json

收藏 評論

愛可生開源社區 - MySQL 如何避免 RC 隔離級別下的 INSERT 死鎖?

本文分析了 INSERT 及其變種(REPLACE/INSERT ON DUPLICATE KEY UPDATE)的幾個場景的死鎖及如何避免。 作者:張洛丹,DBA 數據庫技術愛好者~ 愛可生開源社區出品,原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 本文共 3200 字,預計閲讀需要 10 分鐘。 説在前面 本文分析了 INSERT 及其變種(REPLACE/INSERT O

MySQL , , 事務

收藏 評論

京東雲開發者 - ReentrantLock源碼解析 | 京東雲技術團隊

併發指同一時間內進行了多個線程。併發問題是多個線程對同一資源進行操作時產生的問題。通過加鎖可以解決併發問題,ReentrantLock是鎖的一種。 1 ReentrantLock 1.1 定義 ReentrantLock是Lock接口的實現類,可以手動的對某一段進行加鎖。ReentrantLock可重入鎖,具有可重入性,並且支持可中斷鎖。其內部對鎖的控制有兩種實現,一種為公平鎖,另一種為非公平鎖.

, reentrantreadwritelock , 源碼分析 , 併發編程 , 後端

收藏 評論

阿里雲開發者 - Java中活鎖是什麼啊?

活鎖是與死鎖對應的,是説雙方沒有互相等待而無法進行,都可以動,但是動完以後仍是死鎖狀態。 完整內容請點擊下方鏈接查看: https://developer.aliyun.com/ask/463993?groupCode=learning 版權聲明:本文內容由阿里雲實名註冊用户自發貢獻,版權歸原作者所有,阿里雲開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里雲開發者社區用户服務協

, 阿里雲 , 技術 , JAVA , Javascript

收藏 評論

京東雲開發者 - 文盤Rust -- 生命週期問題引發的 static hashmap 鎖 | 京東雲技術團隊

2021年上半年,擼了個rust cli開發的框架,基本上把交互模式,子命令提示這些cli該有的常用功能做進去了。項目地址:https://github.com/jiashiwen/interactcli-rs。 春節以前看到axum已經0.4.x了,於是想看看能不能用rust做個服務端的框架。 春節後開始動手,在做的過程中會碰到各種有趣的問題。於是記下來想和社區的小夥伴一起分享。社區裏的小夥伴大

hashmap , static , , rust , cli

收藏 評論

京東雲開發者 - 線上SQL超時場景分析-MySQL超時之間隙鎖 | 京東物流技術團隊

前言 之前遇到過一個由MySQL間隙鎖引發線上sql執行超時的場景,記錄一下。 背景説明 分佈式事務消息表:業務上使用消息表的方式,依賴本地事務,實現了一套分佈式事務方案 消息表名:mq_messages 數據量:3000多萬 索引:create_time 和 status status:有兩個值,1 和 2, 其中99%以上的狀態都是2,表示分佈式事務全部已經執行完成,可以刪除。 消息表處理邏輯

MySQL , , 數據庫 , SQL

收藏 評論

京東雲開發者 - 消失的死鎖:從 JSF 線程池滿到 JVM 初始化原理剖析 | 京東雲技術團隊

一、問題描述 在一次上線時,按照正常流程上線後,觀察了線上報文、接口可用率十分鐘以上,未出現異常情況,結果在上線一小時後突然收到jsf線程池耗盡的報警,並且該應用一共有30台機器,只有一台機器出現該問題,迅速下線該機器的jsf接口,恢復線上。然後開始排查問題。 報錯日誌信息: [WARN]2023-04-10 18:03:34.847 [ - ][] |[JSF-23002]Task:java.

線程池 , jvm , , jsf

收藏 評論

阿兵雲原生 - 什麼是分佈式鎖?他解決了什麼樣的問題?

相信對於朋友們來説,鎖這個東西已經非常熟悉了,在説分佈式鎖之前,我們來聊聊單體應用時候的本地鎖,這個鎖很多小夥伴都會用 ✔本地鎖 我們在開發單體應用的時候,為了保證多個線程併發訪問公共資源的時候,期望在同一個時間只能有一個線程去訪問資源,且在這個線程訪問資源結束之後,其他的線程才可以訪問這塊資源 這個時候會使用到鎖機制,一般根據不同的場景會使用到互斥鎖,讀寫鎖,自旋鎖等等🧐🧐 我們還知道使用

, 分佈式

收藏 評論

今夜有點兒涼 - Redis怎麼實現分佈式鎖,以及注意事項

Redis 做分佈式鎖是通過利用 Redis 的一些基本命令來實現鎖的獲取、釋放以及避免死鎖等問題。常見的實現方式包括使用 SETNX 命令、SET 命令以及 RedLock 算法。 1. 分佈式鎖的基本實現方式 使用 SETNX 命令實現分佈式鎖 SETNX(SET if Not Exists)是 Redis 提供的一個原子命令,用於設置鍵值對,只在鍵不存在時執行操作。通過這個命令,可以實現簡單

redis , , JAVA , 分佈式 , 後端

收藏 評論

註銷 - 什麼是計算機編程領域的樂觀鎖和悲觀鎖

樂觀鎖和悲觀鎖是計算機編程領域中用於處理併發訪問數據的兩種不同策略。它們的主要目標是在多個線程或進程同時訪問共享數據時,保證數據的一致性和完整性,避免出現競態條件(Race Condition)。在不同的情景下,選擇合適的鎖策略可以提高程序的性能和可靠性。 1. 悲觀鎖(Pessimistic Locking): 悲觀鎖假定在操作數據時,會發生競態條件,因此默認情況下將數據鎖定,防止其他線程或進程

編程 , , 併發 , 併發模型

收藏 評論

京東雲開發者 - 記一次線上問題引發的對 Mysql 鎖機制分析 | 京東物流技術團隊

背景 最近雙十一開門紅期間組內出現了一次因 Mysql 死鎖導致的線上問題,當時從監控可以看到數據庫活躍連接數飆升,導致應用層數據庫連接池被打滿,後續所有請求都因獲取不到連接而失敗 整體業務代碼精簡邏輯如下: @Transaction public void service(Integer id) { delete(id); insert(id); } 數據庫實例監控: 當時

死鎖 , MySQL , , 數據庫

收藏 評論

杜若 - Java鎖優化之批量重偏向

1. Java鎖的重偏向機制 1.1 偏向鎖機制 我們知道,當我們使用synchronized關鍵字的時候,一個對象a只被一個對象訪問的時候,對對象加的鎖偏向鎖,如果之後出現第二個線程訪問a的時候(這裏只考慮線程交替執行的情況,不存在競爭),不管線程1是已死亡還是運行狀態,此時鎖都會升級為輕量鎖,並且鎖升級過程不可逆。 1.2 批量重偏向 但是如果有很多對象,這些對象同屬於一個類(假設是類A)被線

, synchronized

收藏 評論

Echo - synchronized 原理分析

synchronized 原理分析 synchronized 是Java 提供的同步源語,它為 共享資源 提供了原子性 和 可見性保障,本文通過原子性 和 可見性 二個維度分析其實現原理 sync 原子性 通過 monitor 保證 原子性,具體表現為 monitorenter 和 monitorexit 或 ACC_SYNCHRONIZED 來實現加鎖 加鎖流程如下 鎖升級流程

, 源碼分析 , 原理 , JAVA , synchronized

收藏 評論

lane - AbstractQueuedSynchronizer 源碼解析

AbstractQueuedSynchronizer簡稱AQS,ReentrantLock,ReentrantReadWriteLock,CountDownLatch,Semaphore等等這些鎖都是基於AQS實現的。AQS核心主要實現了鎖的狀態的同步,隊列排隊、喚醒管理,鎖的釋放等底層功能。主要基於state屬性來控制鎖的可用狀態,通過維護一個CLH雙向鏈表隊列來管理併發獲取鎖的線程進行排隊。

, 同步鎖 , JAVA , 併發編程

收藏 評論

杜若 - 分佈式鎖實現

1、redis分佈式鎖 redis 最普通的分佈式鎖 加鎖: 第一個最普通的實現方式,就是在 redis 裏使用setnx命令創建一個 key,這樣就算加鎖。 SET resource_name my_random_value NX PX 30000 解鎖: 用下面的lua腳本保證原子性 if redis.call('get', KEYS[1]) == ARGV[1] then

redis , 分佈式鎖 ,

收藏 評論

程序員波特 - Java中鎖的解決方案

前言 在上一篇文章中,介紹了什麼是鎖,以及鎖的使用場景,本文繼續給大家繼續做深入的介紹,介紹JAVA為我們提供的不同種類的鎖。 JAVA為我們提供了種類豐富的鎖,每種鎖都有不同的特性,鎖的使用場景也各不相同。由於篇幅有限,在這裏只給大家介紹比較常用的幾種鎖。我會通過鎖的定義,核心代碼剖析,以及使用場景來給大家介紹JAVA中主流的幾種鎖。 樂觀鎖 與 悲觀鎖 樂觀鎖與悲觀鎖應該是每個開發人員最先接觸

lock , , JAVA , synchronized

收藏 評論

阿里雲開發者 - 鎖的優化策略

鎖的優化策略有以下幾種: 減少鎖的粒度:將原本粗粒度的鎖細化為更細的鎖,這樣就能減少競爭和衝突。但是這種策略需要考慮細粒度鎖的實現和維護成本,以及可能會帶來的更多的上下文切換。 避免鎖的使用:嘗試使用無鎖數據結構、樂觀鎖或無鎖算法替代鎖,這樣可以避免鎖帶來的性能損失,但也需要考慮其適用性和正確性。 鎖分離:在使用鎖的情況下,嘗試將不同的鎖分離,避免不同的鎖之間的競爭和衝突。這種策略需要考慮鎖

雲計算 , , 阿里雲 , 阿里雲開發者

收藏 評論

jack - 20張圖帶你徹底瞭解ReentrantLock加鎖解鎖的原理_阿Q説代碼的技術博客

ReentrantLock加鎖流程 加鎖成功流程 其實就是把state改為1,然後設置ExclusiveOwnerThread為當前線程 ** 加鎖失敗流程** 進入tryAcquire邏輯,這是state已經是1,結果仍然失敗 接下來進入addWaiter邏輯,構造Node隊

, JAVA , Css , juc , 前端開發 , ReentrantLock , 後端 , HTML

收藏 評論