最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java線程公平鎖和非公平鎖的差異講解

 更新時(shí)間:2019年01月09日 11:58:15   作者:李燦輝  
今天小編就為大家分享一篇關(guān)于Java線程公平鎖和非公平鎖的差異講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

公平鎖,顧名思義,它是公平的,可以保證獲取鎖的線程按照先來后到的順序,獲取到鎖。

非公平鎖,顧名思義,各個(gè)線程獲取到鎖的順序,不一定和它們申請(qǐng)的先后順序一致,有可能后來的線程,反而先獲取到了鎖。

在實(shí)現(xiàn)上,公平鎖在進(jìn)行l(wèi)ock時(shí),首先會(huì)進(jìn)行tryAcquire()操作。在tryAcquire中,會(huì)判斷等待隊(duì)列中是否已經(jīng)有別的線程在等待了。如果隊(duì)列中已經(jīng)有別的線程了,則tryAcquire失敗,則將自己加入隊(duì)列。如果隊(duì)列中沒有別的線程,則進(jìn)行獲取鎖的操作。

/**
     * Fair version of tryAcquire. Don't grant access unless
     * recursive call or no waiters or is first.
     **/
    protected final boolean tryAcquire(int acquires) {
      final Thread current = Thread.currentThread();
      int c = getState();
      if (c == 0) {
        if (!hasQueuedPredecessors() &&
          compareAndSetState(0, acquires)) {
          setExclusiveOwnerThread(current);
          return true;
        }
      }
      else if (current == getExclusiveOwnerThread()) {
        int nextc = c + acquires;
        if (nextc < 0)
          throw new Error("Maximum lock count exceeded");
        setState(nextc);
        return true;
      }
      return false;
    }

非公平鎖,在進(jìn)行l(wèi)ock時(shí),會(huì)直接嘗試進(jìn)行加鎖,如果成功,則獲取到鎖,如果失敗,則進(jìn)行和公平鎖相同的動(dòng)作。

從公平鎖和非公平的實(shí)現(xiàn)上來看,他們的操作基本相同,唯一的區(qū)別在于,在lock時(shí),非公平鎖會(huì)直接先進(jìn)行嘗試加鎖的操作。

當(dāng)前一個(gè)線程完成了鎖的使用,并且釋放了,而且此時(shí)等待隊(duì)列非空時(shí),如果這是有新線程申請(qǐng)鎖,那么,公平鎖和非公平鎖的表現(xiàn)就會(huì)出現(xiàn)差異。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • 使用Springboot封裝一個(gè)自適配的數(shù)據(jù)單位轉(zhuǎn)換工具類

    使用Springboot封裝一個(gè)自適配的數(shù)據(jù)單位轉(zhuǎn)換工具類

    我們?cè)诮邮涨芭_(tái)傳輸?shù)臄?shù)據(jù)時(shí),往往SpringBoot使用內(nèi)置的數(shù)據(jù)類型轉(zhuǎn)換器把我們提交的數(shù)據(jù)自動(dòng)封裝成對(duì)象等類型,下面這篇文章主要給大家介紹了關(guān)于使用Springboot封裝一個(gè)自適配的數(shù)據(jù)單位轉(zhuǎn)換工具類的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 使用原生JDBC動(dòng)態(tài)解析并獲取表格列名和數(shù)據(jù)的方法

    使用原生JDBC動(dòng)態(tài)解析并獲取表格列名和數(shù)據(jù)的方法

    這篇文章主要介紹了使用原生JDBC動(dòng)態(tài)解析并獲取表格列名和數(shù)據(jù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Eclipse中導(dǎo)出碼云上的項(xiàng)目方法(圖文教程)

    Eclipse中導(dǎo)出碼云上的項(xiàng)目方法(圖文教程)

    下面小編就為大家?guī)硪黄狤clipse中導(dǎo)出碼云上的項(xiàng)目方法(圖文教程)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • 了解Java多線程的可見性與有序性

    了解Java多線程的可見性與有序性

    這篇文章主要介紹了了解Java多線程的可見性與有序性,在Java內(nèi)存模型中,允許編譯器和處理器對(duì)指令進(jìn)行重排序,但是重排序過程不會(huì)影響到單線程程序的執(zhí)行,卻會(huì)影響到多線程并發(fā)執(zhí)行的正確性。,需要的朋友可以參考下
    2019-06-06
  • Java實(shí)現(xiàn)單位換算功能

    Java實(shí)現(xiàn)單位換算功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)單位換算功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java經(jīng)典排序算法之歸并排序?qū)崿F(xiàn)代碼

    Java經(jīng)典排序算法之歸并排序?qū)崿F(xiàn)代碼

    這篇文章主要介紹了Java經(jīng)典排序算法之歸并排序?qū)崿F(xiàn)代碼,歸并排序是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法的一個(gè)非常典型的應(yīng)用,將已有序的子序列合并,得到完全有序的序列,需要的朋友可以參考下
    2023-10-10
  • Spring MVC的項(xiàng)目準(zhǔn)備和連接建立方法

    Spring MVC的項(xiàng)目準(zhǔn)備和連接建立方法

    SpringWebMVC是基于Servlet API的Web框架,屬于Spring框架的一部分,主要用于簡化Web應(yīng)用程序的開發(fā),SpringMVC通過控制器接收請(qǐng)求,使用模型處理數(shù)據(jù),并通過視圖展示結(jié)果,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • springboot2.2 集成 activity6實(shí)現(xiàn)請(qǐng)假流程(示例詳解)

    springboot2.2 集成 activity6實(shí)現(xiàn)請(qǐng)假流程(示例詳解)

    這篇文章主要介紹了springboot2.2 集成 activity6實(shí)現(xiàn)請(qǐng)假完整流程示例詳解,本文通過示例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot之那些注入不了的Spring占位符(${}表達(dá)式)問題

    SpringBoot之那些注入不了的Spring占位符(${}表達(dá)式)問題

    這篇文章主要介紹了SpringBoot之那些注入不了的Spring占位符(${}表達(dá)式)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java全面細(xì)致講解Wrapper的使用

    Java全面細(xì)致講解Wrapper的使用

    在封裝中有一種特殊的類,能夠把基本的數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換來方便實(shí)際的使用。我們?cè)谥疤岬降囊恍?shù)據(jù)類型,最明顯的特征是所有字母為小寫狀態(tài),那么經(jīng)過Wrapper的包裝后,首字母就變成了大寫。下面我們就這種特殊的封裝類Wrapper的使用
    2022-05-05

最新評(píng)論

昭平县| 乌审旗| 广昌县| 博乐市| 武定县| 高平市| 辽宁省| 新沂市| 东城区| 凤城市| 忻州市| 英吉沙县| 沙河市| 台北县| 临颍县| 古交市| 二手房| 青铜峡市| 崇仁县| 习水县| 蕲春县| 化德县| 乐安县| 乐东| 金寨县| 南江县| 隆子县| 邹城市| 定襄县| 讷河市| 高陵县| 锡林浩特市| 新密市| 漾濞| 临朐县| 中宁县| 龙海市| 肇源县| 砚山县| 常州市| 阳谷县|