公平锁和非公平锁
公平锁保障了多线程下各线程获取锁的顺序,先到的线程优先获取锁。区别是在tryAcquire()
方法中,公平锁会判断等待队列里是否有其他线程,若有,则当前线程会进入等待队列。非公平锁如果检测都锁未被占用,就会直接抢占锁。无论是公平锁还是非公平锁,在等待队列里的线程都遵循 FIFO 原则。
非公平锁的性能好于公平锁,因为非公平锁减少了线程挂起的几率,后来的线程有一定几率逃离被挂起的开销。
Search
Dec 14, 2023, 1 min read
公平锁保障了多线程下各线程获取锁的顺序,先到的线程优先获取锁。区别是在tryAcquire()
方法中,公平锁会判断等待队列里是否有其他线程,若有,则当前线程会进入等待队列。非公平锁如果检测都锁未被占用,就会直接抢占锁。无论是公平锁还是非公平锁,在等待队列里的线程都遵循 FIFO 原则。
非公平锁的性能好于公平锁,因为非公平锁减少了线程挂起的几率,后来的线程有一定几率逃离被挂起的开销。