公平锁 VS 非公平锁

公平锁:

1.概念

公平锁是指多个线程按照申请锁的顺序来获取锁,线程直接进入队列中排队,队列中的第一个线程才能获 得锁

2.优点

公平锁的优点是等待锁的线程不会饿死

3.缺点

缺点是整体吞吐效率相对非公平锁要低,等待队列中除第 一个线程以外的所有线程都会阻塞,CPU唤醒阻塞线程的开销比非公平锁大。

非公平锁:

1.概念

非公平锁是多个线程加锁时直接尝试获取锁,获取不到才会到等待队列的队尾等待。但如果此时锁刚好可 用,那么这个线程可以无需阻塞直接获取到锁,所以非公平锁有可能出现后申请锁的线程先获取锁的场景

2.优点

非公平锁的优点是可以减少唤起线程的开销,整体的吞吐效率高,因为线程有几率不阻塞直接获得 锁,CPU不必唤醒所有线程

3.缺点

缺点是处于等待队列中的线程可能会饿死,或者等很久才会获得锁

引用自  不可不说的Java“锁”事 - 美团技术团队

猜你喜欢

转载自blog.csdn.net/Leftmumu/article/details/87068915