公平锁与非公平锁

公平锁与非公平锁的区别:

公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。

    优点:所有的线程都能得到资源,不会饿死在队列中。

    缺点:唤醒其它线程的资源开销大,吞吐量低;

非公平锁:多个线程去获取锁的时候,会直接去尝试获取,获取不到,再去进入等待队列,如果能获取到,就直接获取到锁。

    优点:资源开销小,吞吐量大;

    缺点:可能会出现线程饿死;

 

  synchronized:非公平锁

  ReentrantLock:默认非公平锁,也可以设置为公平锁;

public ReentrantLock() {
    sync = new NonfairSync();
}

public ReentrantLock(boolean fair) {
         sync = fair ? new FairSync() : new NonfairSync();
  }

 

posted @ 2021-03-05 21:17  徒步而行  阅读(244)  评论(0)    收藏  举报