成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一分鐘理解Java公平鎖與非公平鎖

開發 開發工具 后端
和朋友聊天他提到:ReentrantLock 的構造函數可以傳遞一個 bool 數據,true 時構造的是“公平鎖”、false 時構造的是“非公平鎖”。我的印象中鎖是不區分類型的,所以認為這應該是 Java 發明的概念,于是就惡補了一下。

和朋友聊天他提到:ReentrantLock 的構造函數可以傳遞一個 bool 數據,true 時構造的是“公平鎖”、false 時構造的是“非公平鎖”。

我的印象中鎖是不區分類型的,所以認為這應該是 Java 發明的概念,于是就惡補了一下。

[[238481]]

鎖的底層實現

無論什么語言在操作系統層面鎖的操作都會變成系統調用(System Call),以 Linux 為例,就是 futex 函數,可以把它理解為兩個函數: futex_wait(s),對變量 s 加鎖;futex_wake(s)釋放 s 上的鎖,喚醒其他線程。

如果你熟悉操作系統原理其實就是 P/V 操作。

Java 公平鎖和非公平鎖

公平鎖的 lock 操作是調用futex_wait,unlock 操作是調用futex_wake。比如下面的代碼

非公平鎖的 lock/unlock 操作會先做一次 CAS 操作然后再調用 futex_wait、futex_wake。比如下面的代碼

在上鎖之前增加了一個 CAS 原子操作,它接受三個變量可以把它理解為下面的邏輯:

***個參數的值和第二個參數不相等則返回 0 表示操作失敗否則更新為新的值。這個函數不是由代碼實現的而是 CPU 提供的一個指令,比如 Intel 的叫 cmpxchg;高級語言進行了封裝,比如 Java 的 Atomic 變量。

為什么

明白了原理再來提問為什么,在上鎖之前先通過 CAS 修改一個變量表示“我要上鎖”了看似很冗余的操作,其實它是一次自旋,如果資源很快被使用完可以提高系統的吞吐率。考慮下面的場景

上鎖之前的時間是 t1,上鎖之后是 t2(使用資源),釋放鎖是 t3。

現在有兩個線程,處于 t1 狀態,其中 A 線程先搶到資源處于 t2 ;B 線程也會嘗試 lock,與此同時 t2 釋放了,而 lock 動作也執行成功了 B 被掛起;系統繼續執行 A 釋放成功喚醒 B 繼續執行。

上述過程中 B 只要再多等待“一丟丟”就不用被掛起,直接獲得資源繼續執行。非公平鎖的 CAS 操作就是為了增加一丟丟時間。

采用非公平鎖,如果系統中有 3 個線程執行,A 搶到資源,C 沒有搶到處于掛起狀態,此時 B 嘗試 CAS 操作,而 A 剛好釋放掉資源還沒有來得及喚醒 C,那么 B 會先搶到資源,在 C 之前執行。這就是“非公平”的來歷,雖然 C 老老實實的等待了很長時間,但是 B 的“時機”把握的好,迅速“插隊”完成資源搶占。

總結

上鎖的過程本身也是有時間開銷的,如果操作資源的時間比上鎖的時間還短建議使用非公平鎖可以提高系統的吞吐率;否則就老老實實的用公平鎖。

【本文是51CTO專欄作者“邢森”的原創文章,轉載請聯系作者本人獲取授權】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2024-12-03 00:35:20

2019-01-04 11:18:35

獨享鎖共享鎖非公平鎖

2022-12-26 00:00:04

公平鎖非公平鎖

2022-07-12 08:56:18

公平鎖非公平鎖Java

2023-10-07 08:17:40

公平鎖非公平鎖

2022-05-09 07:37:04

Java非公平鎖公平鎖

2016-12-16 11:05:00

分布式互斥線程

2020-08-24 08:13:25

非公平鎖源碼

2018-12-12 22:51:24

Java包裝語言

2017-02-21 13:00:27

LoadAverage負載Load

2018-07-31 16:10:51

Redo Undo數據庫數據

2018-06-26 05:23:19

線程安全函數代碼

2021-08-20 07:54:20

非公平鎖 Java多線編程

2017-03-30 19:28:26

HBase分布式數據

2018-06-26 10:52:45

2018-06-28 14:00:01

分布式集群架構

2017-07-06 08:12:02

索引查詢SQL

2020-05-21 19:46:19

區塊鏈數字貨幣比特幣

2022-07-18 06:16:07

單點登錄系統

2020-07-17 07:44:25

云計算邊緣計算IT
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人精品鲁一区一区二区 | 刘亦菲国产毛片bd | 综合激情网 | 操久久 | 国产精品视频区 | 天天操操操操操 | 日韩精品一区二区三区视频播放 | 羞羞的视频在线 | 国产激情精品视频 | 国产欧美日韩一区二区三区在线 | 午夜激情视频在线 | 91精品国产91久久久久久三级 | 日韩中文一区 | 国产精品九九九 | 国产黄色大片在线免费观看 | 欧美综合一区 | 中文字幕在线播放第一页 | 国产在线精品一区二区三区 | 日韩在线观看一区 | 欧洲国产精品视频 | 一区二区在线观看av | 亚洲精品久久久久久久久久久久久 | 91久久久久久久久久久久久 | 伊人久久伊人 | 麻豆精品久久久 | 特黄色毛片 | 免费中文字幕 | www.日韩高清 | 啪啪免费网 | 羞羞视频免费观看入口 | 久久久久久久电影 | 久久精品 | 99精品网| 欧美一区二区大片 | 日韩精品一区二区三区四区 | 欧美激情在线播放 | 亚洲精品一区二区三区蜜桃久 | 国产高清精品在线 | www精品美女久久久tv | 日韩欧美操| 午夜爽爽爽男女免费观看 |