日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java锁之公平和非公平锁

發(fā)布時(shí)間:2024/2/28 java 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java锁之公平和非公平锁 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java鎖之公平和非公平鎖


目錄

  • 公平鎖和非公平鎖概念
  • 公平鎖和非公平鎖區(qū)別
  • ReentrantLock和synchronized是公平鎖還是非公平鎖?

  • 1. 公平鎖和非公平鎖概念


  • 公平鎖:是指多個(gè)線程按照申請(qǐng)鎖的順序來(lái)獲取鎖,類似排隊(duì)打飯,先來(lái)后到。
  • 非公平鎖:是指多個(gè)線程獲取鎖的順序并不是按照申請(qǐng)鎖的順序,有可能后申請(qǐng)的線程比先申請(qǐng)的線程優(yōu)先獲取鎖,在高并發(fā)的情況下,有可能會(huì)造成優(yōu)先級(jí)反轉(zhuǎn)或者饑餓現(xiàn)象

  • 2. 公平鎖和非公平鎖區(qū)別


  • 公平鎖:Threads acquire a fair lock in which they requested
  • 公平鎖:就是很公平,在并發(fā)壞境中.每個(gè)線程在獲取鎖時(shí)會(huì)先查看此鎖維護(hù)的等待隊(duì)列,如果為空,或者當(dāng)前線程是等待隊(duì)列的第一個(gè),就占有鎖.否則就會(huì)加入到等待隊(duì)列中.以后會(huì)按照FIFO的規(guī)則從隊(duì)列中取到自己。
  • 非公平鎖:a nonfair lock permis barging:threads requesting a lock can jump ahead of the queue of waiting threads if the lock
    happens to be available when it is requested.
  • 非公平鎖比較粗魯,上來(lái)就直接嘗試占有鎖,如果嘗試失敗,就再采用類似公平鎖那種方式。

  • 3. ReentrantLock和synchronized是公平鎖還是非公平鎖?


  • Java ReentrantLock 而言,通過(guò)構(gòu)造函數(shù)指定該鎖是否為公平鎖,默認(rèn)是非公平鎖。非公平鎖的優(yōu)點(diǎn)在于吞吐量比公平鎖大。源碼如下
  • Lock lock = new ReentrantLock();

    點(diǎn)進(jìn)去源碼截圖:

    默認(rèn)為非公平鎖,當(dāng)我們傳入true參數(shù)后,源碼為

    Lock lock = new ReentrantLock(true);

    點(diǎn)進(jìn)去源碼為:

  • 對(duì)于synchronized而言,也是一種非公平鎖
  • 總結(jié)

    以上是生活随笔為你收集整理的Java锁之公平和非公平锁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。