定义
如果在绝对时间上,先对锁进行获取的请求一定先被满足,那么这个锁是公平的,反之,是不公平的。
公平的获取锁,也就是等待时间最长的线程最优先获取锁,也可以说锁获取是顺序的。
饥饿现象
当一个线程请求锁时,只要获取了同步状态即成功获取锁。在这个前提下,刚释放锁的线程再次获取同步状态的几率会非常大,使得其他线程只能在同步队列中等待。
两种锁的比较
公平性锁保证了锁的获取按照 FIFO 原则,而代价是进行大量的线程切换,因此公平的锁机制往往没有非公平的效率高。
非公平锁可能造成线程“饥饿”,但极少的线程切换,保证了其更大的吞吐量。