程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java鎖之壅塞鎖引見和代碼實例

Java鎖之壅塞鎖引見和代碼實例

編輯:關於JAVA

Java鎖之壅塞鎖引見和代碼實例。本站提示廣大學習愛好者:(Java鎖之壅塞鎖引見和代碼實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java鎖之壅塞鎖引見和代碼實例正文


鎖作為並發同享數據,包管分歧性的對象,在JAVA平台有多種完成(如 synchronized 和 ReentrantLock等等 ) 。這些曾經寫好供給的鎖為我們開辟供給了方便,然則鎖的詳細性質和類型卻很少被說起。本系列文章將剖析JAVA下罕見的鎖稱號和特征,為年夜家答疑解惑。

壅塞鎖

壅塞鎖,與自旋鎖分歧,轉變了線程的運轉狀況。
在JAVA情況中,線程Thread有以下幾個狀況:

1,新建狀況

2,停當狀況

3,運轉狀況

4,壅塞狀況

5,逝世亡狀況

壅塞鎖,可以說是讓線程進入壅塞狀況停止期待,當取得響應的旌旗燈號(叫醒,時光) 時,才可以進入線程的預備停當狀況,預備停當狀況的一切線程,經由過程競爭,進入運轉狀況。

JAVA中,可以或許進入\加入、壅塞狀況或包括壅塞鎖的辦法有 ,synchronized 症結字(個中的分量鎖),ReentrantLock,Object.wait()\notify(),LockSupport.park()/unpart()(j.u.c常常應用)

上面是一個JAVA 壅塞鎖實例:

package lock;

import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
import java.util.concurrent.locks.LockSupport;

public class CLHLock1 {
  public static class CLHNode {
    private volatile Thread isLocked;
  }

  @SuppressWarnings("unused")
  private volatile CLHNode                      tail;
  private static final ThreadLocal<CLHNode>              LOCAL  = new ThreadLocal<CLHNode>();
  private static final AtomicReferenceFieldUpdater<CLHLock1, CLHNode> UPDATER = AtomicReferenceFieldUpdater.newUpdater(CLHLock1.class,
                                          CLHNode.class, "tail");

  public void lock() {
    CLHNode node = new CLHNode();
    LOCAL.set(node);
    CLHNode preNode = UPDATER.getAndSet(this, node);
    if (preNode != null) {
      preNode.isLocked = Thread.currentThread();
      LockSupport.park(this);
      preNode = null;
      LOCAL.set(node);
    }
  }

  public void unlock() {
    CLHNode node = LOCAL.get();
    if (!UPDATER.compareAndSet(this, node, null)) {
      System.out.println("unlock\t" + node.isLocked.getName());
      LockSupport.unpark(node.isLocked);
    }
    node = null;
  }
}

在這裡我們應用了LockSupport.unpark()的壅塞鎖。 該例子是將CLH鎖修正而成。

壅塞鎖的優勢在於,壅塞的線程不會占用cpu時光,不會招致 CPu占用率太高,但進入時光和恢復時光都要比自旋鎖略慢。

在競爭劇烈的情形下 壅塞鎖的機能要顯著高於 自旋鎖。

幻想的情形則是; 在線程競爭不劇烈的情形下,應用自旋鎖,競爭劇烈的情形下應用,壅塞鎖。

(全文完)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved