推荐链接:
总结——》【Java】
总结——》【Mysql】
总结——》【Redis】
总结——》【Kafka】
总结——》【Spring】
总结——》【SpringBoot】
总结——》【MyBatis、MyBatis-Plus】
总结——》【Linux】
总结——》【MongoDB】
总结——》【Elasticsearch】
一、概念
锁类型 | 特点 | 描述 |
---|---|---|
公平锁 | 排队竞争锁 | 线程A获取到了锁资源,线程B没有拿到,线程B去排队,线程C来了,直接排到线程B的后面,等待B拿到锁资源或者是B取消后,才可以尝试去竞争锁资源。 |
非公平锁 | 先插队竞争锁,如果不成功再排队竞争锁 | 线程A获取到了锁资源,线程B没有拿到,线程B去排队,线程C来了,先尝试竞争锁资源 - 成功拿到锁资源:开心,插队成功。 - 没有拿到锁资源:依然要排到线程B的后面,等待B拿到锁资源或者是B取消后,才可以尝试去竞争锁资源。 |
二、分类
锁类型 | 描述 |
---|---|
synchronized | 只有非公平锁 |
ReentrantLock | 有公平锁 & 非公平锁 |
ReentrantReadWriteLock | 有公平锁 & 非公平锁 |
三、非公平锁的优点
每当锁被释放后,任何一个线程都有机会竞争到锁,有效提高执行性能
。
四、非公平锁的缺点
可能会产生线程饥饿
现象。