1. 불공정 잠금은 잠금이 요청된 순서대로 잠금이 획득되는 것을 보장할 수 없습니다. 이로 인해 하나 이상의 스레드가 잠금을 얻지 못할 수 있습니다.
2. CPU를 깨우는 스레드 비용을 줄일 수 있으며 전반적인 처리량 효율성이 매우 높아집니다. 그러나 오랫동안 잠금을 획득하지 못하거나 전혀 획득하지 못해 기아 상태로 이어지는 스레드가 있을 수 있습니다.
인스턴스
/** * 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; } }
위 내용은 Java의 불공정 잠금이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!