Rumah  >  Artikel  >  Java  >  Apakah kunci tidak adil di java

Apakah kunci tidak adil di java

WBOY
WBOYke hadapan
2023-04-29 08:52:12754semak imbas

1. Kunci tidak adil tidak dapat menjamin bahawa kunci diperoleh mengikut urutan kunci diminta. Ini mungkin menyebabkan satu atau beberapa utas tidak pernah mendapat kunci.

2. Kos proses pembangkitan CPU boleh dikurangkan dan kecekapan pemprosesan keseluruhan akan menjadi sangat tinggi. Walau bagaimanapun, mungkin terdapat benang yang tidak dapat dikunci untuk masa yang lama atau bahkan tidak pernah, membawa kepada kebuluran.

Instance

    /**
     * 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;
        }
    }

Atas ialah kandungan terperinci Apakah kunci tidak adil di java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam