公平锁
final void lock() {
acquire(1);
}
非公平锁
final void lock() {
if (compareAndSetState(0, 1))
setExclusiveOwnerThread(Thread.currentThread());
else
acquire(1);
}
公平锁与非公平锁的公平体现在加锁的时候.
比如,有10个线程在等待,一个线程在工作,等到这个线程完成后,10个等待线程中的第一个会被唤醒,唤醒后该线程去获取锁,这个时候如果新来了一个线程,并且新的线程抢到了锁,那么这样就体现了非公平,因为新来的线程直接插队了,比早来的线程更早获取到锁.
而公平锁是直接去排队,不存在插队问题,所以是公平的