亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中線程公平鎖和非公平鎖的區別是什么

發布時間:2021-06-11 15:10:22 來源:億速云 閱讀:260 作者:Leah 欄目:編程語言

本篇文章為大家展示了Java中線程公平鎖和非公平鎖的區別是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

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

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

在實現上,公平鎖在進行lock時,首先會進行tryAcquire()操作。在tryAcquire中,會判斷等待隊列中是否已經有別的線程在等待了。如果隊列中已經有別的線程了,則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;
    }

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

從公平鎖和非公平的實現上來看,他們的操作基本相同,唯一的區別在于,在lock時,非公平鎖會直接先進行嘗試加鎖的操作。

當前一個線程完成了鎖的使用,并且釋放了,而且此時等待隊列非空時,如果這是有新線程申請鎖,那么,公平鎖和非公平鎖的表現就會出現差異。

上述內容就是Java中線程公平鎖和非公平鎖的區別是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

城市| 民乐县| 怀安县| 琼海市| 宣武区| 温宿县| 渭源县| 醴陵市| 蒙城县| 广平县| 屏东市| 鄄城县| 宁化县| 苍梧县| 秦皇岛市| 千阳县| 关岭| 红桥区| 溆浦县| 纳雍县| 定兴县| 克东县| 溧水县| 乳山市| 柘荣县| 泰安市| 扎鲁特旗| 海林市| 库伦旗| 博客| 柯坪县| 汕头市| 扎囊县| 睢宁县| 延庆县| 神木县| 平南县| 周宁县| 阜新| 雷山县| 砀山县|