公平锁和非公平锁

公平锁和非公平锁

  1. 若在释放锁的时候总是没有新的兔子来打扰,则非公平锁等于公平锁;

  2. 若释放锁的时候,正好一个线程请求获得锁,而此时位于队列头的线程还没有被唤醒(因为线程上下文切换是需要不少开销的),此时后来的线程则优先获得锁,成功打破公平,成为非公平锁;

其实对于非公平锁,只要线程进入了等待队列,队列里面依然是FIFO的原则,跟公平锁的顺序是一样的。因为公平锁与非公平锁的release()部分代码是共用AQS的代码。

posted @ 2020-03-18 19:33  别再闹了  阅读(139)  评论(0)    收藏  举报