编辑
2024-08-26
面试题库
0
请注意,本文编写于 149 天前,最后修改于 149 天前,其中某些信息可能已经过时。

公平锁 (Fair Lock):

特点:

  • 保证线程获取锁的顺序与请求锁的顺序相同,即先请求的线程先获取锁。

  • 避免了线程“饥饿”,每个线程都有公平的机会获取锁。

  • 性能开销相对较高,因为需要维护队列,并进行线程之间的比较和竞争。

优点:

  • 公平性:确保每个线程都有获取锁的机会,避免线程“饥饿”。

缺点:

  • 性能较低:由于需要维护队列和进行线程之间的比较,导致获取锁的效率较低。

非公平锁 (Unfair Lock):

特点:

  • 允许线程获取锁的顺序与请求锁的顺序不同,即先请求的线程不一定先获取锁。

  • 可以减少线程切换,提高吞吐量。

  • 性能开销相对较低,因为不需要维护队列,只需进行简单的条件判断和CAS操作。

优点:

  • 性能较高:由于不需要维护队列和进行线程之间的比较,导致获取锁的效率较高。

缺点:

  • 公平性较差:可能导致某些线程长时间无法获取锁,出现“饥饿”现象。

  • 难以预测:线程获取锁的顺序不确定,可能导致某些线程的响应时间较长。

适用场景:

公平锁:适用于对线程公平性要求较高的场景,例如数据库连接池、生产者-消费者队列等。

非公平锁:适用于对性能要求较高的场景,例如轻量级锁、读写锁等。

本文作者:whitebear

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!