>  기사  >  Java  >  Java의 불공정 잠금이란 무엇입니까?

Java의 불공정 잠금이란 무엇입니까?

WBOY
WBOY앞으로
2023-04-29 08:52:12750검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제