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

java非公平鎖知識點實例詳解

 更新時間:2021年10月21日 08:33:15   作者:小妮淺淺  
在本篇文章里小編給大家整理了一篇關(guān)于java非公平鎖知識點實例詳解,有興趣的朋友們可以學(xué)習(xí)參考下。

1、非公平鎖不能保證鎖的獲取是按照請求鎖的順序進行的。這可能會導(dǎo)致某個或某些線程永遠得不到鎖。

2、CPU喚醒線程的費用可以降低,整體吞吐效率會很高。但是可能會有線程長時間甚至永遠得不到鎖,導(dǎo)致餓死。

實例

 /**
     * Sync object for non-fair locks
     */
    static final class NonfairSync extends Sync {
        private static final long serialVersionUID = 7316153563782823691L;
 
        /**
         * Performs lock.  Try immediate barge, backing up to normal
         * acquire on failure.
         */
        final void lock() {
            if (compareAndSetState(0, 1))
                setExclusiveOwnerThread(Thread.currentThread());
            else
                acquire(1);
        }
 
        protected final boolean tryAcquire(int acquires) {
            return nonfairTryAcquire(acquires);
        }
    }
 
    /**
     * Sync object for fair locks
     */
    static final class FairSync extends Sync {
        private static final long serialVersionUID = -3000897897090466540L;
 
        final void lock() {
            acquire(1);
        }
 
        /**
         * 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;
        }
    }

知識點擴展:

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

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

/**
     * 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;
    }

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

到此這篇關(guān)于java非公平鎖知識點實例詳解的文章就介紹到這了,更多相關(guān)java非公平鎖如何理解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java程序員的10道常見的XML面試問答題(XML術(shù)語詳解)

    Java程序員的10道常見的XML面試問答題(XML術(shù)語詳解)

    包括web開發(fā)人員的Java面試在內(nèi)的各種面試中,XML面試題在各種編程工作的面試中很常見。XML是一種成熟的技術(shù),經(jīng)常作為從一個平臺到其他平臺傳輸數(shù)據(jù)的標準
    2014-04-04
  • Java中的while無限循環(huán)結(jié)構(gòu)及實例

    Java中的while無限循環(huán)結(jié)構(gòu)及實例

    這篇文章主要介紹了Java中的while無限循環(huán)結(jié)構(gòu)及實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SpringBoot+Vue靜態(tài)資源刷新后無法訪問的問題解決方案

    SpringBoot+Vue靜態(tài)資源刷新后無法訪問的問題解決方案

    這篇文章主要介紹了SpringBoot+Vue靜態(tài)資源刷新后無法訪問的問題解決方案,文中通過代碼示例和圖文講解的非常詳細,對大家解決問題有一定的幫助,需要的朋友可以參考下
    2024-05-05
  • java8中的lambda表達式,看這篇絕對夠

    java8中的lambda表達式,看這篇絕對夠

    這篇文章主要介紹了java8中的lambda表達式,看這篇絕對夠!具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • idea微服務(wù)項目服務(wù)如何顯示在同一窗口

    idea微服務(wù)項目服務(wù)如何顯示在同一窗口

    本文介紹了如何在微服務(wù)項目導(dǎo)入時將所有服務(wù)加入同一窗口中,解決啟動項目服務(wù)時顯示不全的問題,通過點擊左上角的View,選擇ToolWindows,然后選擇Services,使用快捷鍵Alt+8,選擇Spring Boot,就可以將所有服務(wù)加到同一窗口中
    2025-02-02
  • SpringBoot多數(shù)據(jù)源配置并通過注解實現(xiàn)動態(tài)切換數(shù)據(jù)源

    SpringBoot多數(shù)據(jù)源配置并通過注解實現(xiàn)動態(tài)切換數(shù)據(jù)源

    本文主要介紹了SpringBoot多數(shù)據(jù)源配置并通過注解實現(xiàn)動態(tài)切換數(shù)據(jù)源,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java的IO流實現(xiàn)文件和文件夾的復(fù)制

    Java的IO流實現(xiàn)文件和文件夾的復(fù)制

    這篇文章主要為大家詳細介紹了Java的IO流實現(xiàn)文件和文件夾的復(fù)制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java從控制臺讀入數(shù)據(jù)的幾種方法總結(jié)

    Java從控制臺讀入數(shù)據(jù)的幾種方法總結(jié)

    下面小編就為大家?guī)硪黄狫ava從控制臺讀入數(shù)據(jù)的幾種方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • mybatis update set 多個字段實例

    mybatis update set 多個字段實例

    這篇文章主要介紹了mybatis update set 多個字段實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • String.replaceAll方法詳析(正則妙用)

    String.replaceAll方法詳析(正則妙用)

    這篇文章主要給大家介紹了關(guān)于String.replaceAll方法,正則妙用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評論

福鼎市| 保山市| 枞阳县| 玛多县| 宁南县| 都兰县| 南木林县| 延长县| 甘谷县| 那曲县| 合山市| 察隅县| 新丰县| 马尔康县| 菏泽市| 美姑县| 景德镇市| 常德市| 平山县| 大足县| 嘉善县| 澎湖县| 靖边县| 扬中市| 衡水市| 深圳市| 安义县| 华亭县| 龙游县| 时尚| 洛浦县| 镇赉县| 陆丰市| 宣城市| 永昌县| 克山县| 永宁县| 定襄县| 抚州市| 喜德县| 阜康市|