其他零散知识点

Java锁之公平锁和非公平锁

2019-07-22  本文已影响37人  bearPotMan

公平锁

是指多个线程按照申请锁的顺序来获取锁,遵循的是 先来后到 原则;

非公平锁

是指多个线程获取锁的顺序并不是按照申请锁的顺序来,有可能后申请的线程比先申请的线程优先获取锁,在高并发场景下,有可能会造成线程优先级反转或饥饿现象,遵循的是 抢占式 原则。
什么是饥饿现象呢?就是说有可能后到的线程优先获取锁导致先来的某个线程一直获取不到锁而处于等待状态。

两者的区别

并发包中的 ReentrantLock ,在创建它的时候可以通过指定构造函数的 boolean 类型参数来得到公平锁或非公平锁,默认是非公平锁。非公平锁的优点就在于吞吐量比公平锁大。对于 synchronized 而言也是一种非公平锁。

上一篇下一篇

猜你喜欢

热点阅读