天天看點

Java并發程式設計 - 公平鎖 & 非公平鎖

  • 公平鎖是指多個線程按照申請鎖的順序來擷取鎖,類似排隊打飯,先來後到。
  • 非公平鎖是指多個線程擷取鎖的順序并不是按照申請鎖的順序,有可能後申請的線程比先申請的線程優先擷取鎖在高并發的情況下,有可能會造成優先級反轉或者饑餓現象

并發包中ReentrantLock的建立可以指定構造函數的boolean類型來得到公平鎖或非公平鎖,預設是非公平鎖。

Java并發程式設計 - 公平鎖 & 非公平鎖

兩者差別

公平鎖:Threads acquire a fair lock in the order in which they requested it.

公平鎖,就是很公平,在并發環境中,每個線程在擷取鎖時會先檢視此鎖維護的等待隊列,如果為空,或者目前線程是等待隊列的第一個,就占有鎖,否則就會加入到等待隊列中,以後會按照FIFO的規則從隊列中取到自己

  • 非公平鎖的優點在于吞吐量比公平鎖大。對于Synchronized而言,也是一種非公平鎖。

繼續閱讀