java - 公平锁和非公平锁的区别?
迷茫
迷茫 2017-04-18 09:46:51
0
2
386

此类的构造方法接受一个可选的公平 参数。当设置为 true 时,在多个线程的争用下,这些锁倾向于将访问权授予等待时间最长的线程。否则此锁将无法保证任何特定访问顺序。与采用默认设置(使用不公平锁)相比,使用公平锁的程序在许多线程访问时表现为很低的总体吞吐量(即速度很慢,常常极其慢),但是在获得锁和保证锁分配的均衡性时差异较小。不过要注意的是,公平锁不能保证线程调度的公平性。因此,使用公平锁的众多线程中的一员可能获得多倍的成功机会,这种情况发生在其他活动线程没有被处理并且目前并未持有锁时。还要注意的是,未定时的 tryLock 方法并没有使用公平设置。因为即使其他线程正在等待,只要该锁是可用的,此方法就可以获得成功。

这段话是java.util.concurrent.locks.ReentrantLock中的介绍, 其中对于公平锁的介绍我很不理解.

  1. 为什么"公平锁不能保证线程调度的公平性", 是因为不同线程对于锁的占用时间不同, 导致对于短作业的线程不利吗?

  2. "使用公平锁的众多线程中的一员可能获得多倍的成功机会"这句话是什么意思

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆 (2)
洪涛

如果加上線程調度機制這個因素,就不難理解..
公平鎖也要看對像是不是是第一次得到所,還有重入鎖的概念
第二點。 。線程裡有個"讓步",但是也只是發出個信號。是否處理還看調度機制心情,同理,即使是公平鎖是否成功也看調度機制

    洪涛

    調度線程是作業系統控制的,而不是鎖控制的,鎖只能保證把鎖給等待時間最長的線程,但如果作業系統沒有調度這個線程也沒用了。

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!