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

Java線(xiàn)程公平鎖和非公平鎖的差異講解

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

公平鎖,顧名思義,它是公平的,可以保證獲取鎖的線(xiàn)程按照先來(lái)后到的順序,獲取到鎖。

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

在實(shí)現(xiàn)上,公平鎖在進(jìn)行l(wèi)ock時(shí),首先會(huì)進(jìn)行tryAcquire()操作。在tryAcquire中,會(huì)判斷等待隊(duì)列中是否已經(jīng)有別的線(xiàn)程在等待了。如果隊(duì)列中已經(jīng)有別的線(xiàn)程了,則tryAcquire失敗,則將自己加入隊(duì)列。如果隊(duì)列中沒(méi)有別的線(xiàn)程,則進(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)上來(lái)看,他們的操作基本相同,唯一的區(qū)別在于,在lock時(shí),非公平鎖會(huì)直接先進(jìn)行嘗試加鎖的操作。

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

總結(jié)

以上就是這篇文章的全部?jī)?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)換工具類(lèi)

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

    我們?cè)诮邮涨芭_(tái)傳輸?shù)臄?shù)據(jù)時(shí),往往SpringBoot使用內(nèi)置的數(shù)據(jù)類(lèi)型轉(zhuǎn)換器把我們提交的數(shù)據(jù)自動(dòng)封裝成對(duì)象等類(lèi)型,下面這篇文章主要給大家介紹了關(guān)于使用Springboot封裝一個(gè)自適配的數(shù)據(jù)單位轉(zhuǎn)換工具類(lèi)的相關(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ù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Eclipse中導(dǎo)出碼云上的項(xiàng)目方法(圖文教程)

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

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

    了解Java多線(xiàn)程的可見(jiàn)性與有序性

    這篇文章主要介紹了了解Java多線(xiàn)程的可見(jiàn)性與有序性,在Java內(nèi)存模型中,允許編譯器和處理器對(duì)指令進(jìn)行重排序,但是重排序過(guò)程不會(huì)影響到單線(xiàn)程程序的執(zhí)行,卻會(huì)影響到多線(xiàn)程并發(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框架的一部分,主要用于簡(jiǎn)化Web應(yīng)用程序的開(kāi)發(fā),SpringMVC通過(guò)控制器接收請(qǐng)求,使用模型處理數(shù)據(jù),并通過(guò)視圖展示結(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)假完整流程示例詳解,本文通過(guò)示例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot之那些注入不了的Spring占位符(${}表達(dá)式)問(wèn)題

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

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

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

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

最新評(píng)論

隆尧县| 通许县| 湾仔区| 郁南县| 芜湖市| 旺苍县| 蒙城县| 韶关市| 浠水县| 陆川县| 广昌县| 凤山县| 龙游县| 神农架林区| 景谷| 大连市| 东宁县| 霞浦县| 星子县| 阳泉市| 大名县| 天柱县| 开平市| 稷山县| 仁布县| 彭山县| 通化市| 武定县| 鲁山县| 张家川| 湖北省| 永春县| 依兰县| 修文县| 仙游县| 廊坊市| 海口市| 迁安市| 柘荣县| 呈贡县| 普兰店市|