자바 자물쇠의 차단 자물쇠 소개 및 코드 실례
차단 자물쇠
차단 자물쇠는 자전거 자물쇠와 달리 라인의 운행 상태를 바꾸었다.
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의 점용률이 너무 높지 않지만 진입 시간과 회복 시간이 자전거 자물쇠보다 약간 느리다는 것이다.
경쟁이 치열한 상황에서 자물쇠를 막는 성능은 자전거 자물쇠보다 현저히 높다.
이상적인 상황은라인 경쟁이 치열하지 않은 상황에서 자전거 자물쇠를 사용하고 경쟁이 치열한 상황에서 자물쇠를 막는다.
(전문 끝)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.