公平锁 (Fair Lock):
特点:
保证线程获取锁的顺序与请求锁的顺序相同,即先请求的线程先获取锁。
避免了线程“饥饿”,每个线程都有公平的机会获取锁。
性能开销相对较高,因为需要维护队列,并进行线程之间的比较和竞争。
优点:
缺点:
非公平锁 (Unfair Lock):
特点:
允许线程获取锁的顺序与请求锁的顺序不同,即先请求的线程不一定先获取锁。
可以减少线程切换,提高吞吐量。
性能开销相对较低,因为不需要维护队列,只需进行简单的条件判断和CAS操作。
优点:
缺点:
公平性较差:可能导致某些线程长时间无法获取锁,出现“饥饿”现象。
难以预测:线程获取锁的顺序不确定,可能导致某些线程的响应时间较长。
适用场景:
公平锁:适用于对线程公平性要求较高的场景,例如数据库连接池、生产者-消费者队列等。
非公平锁:适用于对性能要求较高的场景,例如轻量级锁、读写锁等。
本文作者:whitebear
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!