자바 자물쇠의 차단 자물쇠 소개 및 코드 실례

자물쇠는 공유 데이터를 병발하고 일치성을 확보하는 도구로 JAVA 플랫폼에서 여러 가지 실현이 있다(예를 들어synchronized와ReentrantLock 등).이미 작성된 자물쇠는 우리의 개발에 편의를 제공했지만 자물쇠의 구체적인 성질과 유형은 거의 언급되지 않았다.이 시리즈는 JAVA에서 흔히 볼 수 있는 자물쇠 이름과 특성을 분석하여 여러분의 궁금증을 풀어드리겠습니다.
차단 자물쇠
차단 자물쇠는 자전거 자물쇠와 달리 라인의 운행 상태를 바꾸었다.
JAVA 환경에서 스레드 스레드는 다음과 같은 몇 가지 상태로 구성됩니다.
1, 새 상태
2, 준비 상태
3, 실행 상태
4, 차단 상태
5, 사망 상태
차단 자물쇠는 라인을 차단 상태로 들어가 기다리게 하고 해당하는 신호(깨우기, 시간)를 얻을 때 라인의 준비 준비 준비 상태에 들어갈 수 있으며 준비 상태의 모든 라인에서 경쟁을 통해 운행 상태에 들어갈 수 있다.
JAVA에서\종료, 차단 상태 또는 차단 자물쇠를 포함할 수 있는 방법은 synchronized 키워드(중량 자물쇠), ReentrantLock, Object입니다.wait()otify(),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의 점용률이 너무 높지 않지만 진입 시간과 회복 시간이 자전거 자물쇠보다 약간 느리다는 것이다.
경쟁이 치열한 상황에서 자물쇠를 막는 성능은 자전거 자물쇠보다 현저히 높다.
이상적인 상황은라인 경쟁이 치열하지 않은 상황에서 자전거 자물쇠를 사용하고 경쟁이 치열한 상황에서 자물쇠를 막는다.
(전문 끝)

좋은 웹페이지 즐겨찾기