公平鎖
多個線程按照申請鎖的順序去獲得鎖,線程會直接進入隊列去排隊,永遠都是隊列的第一位才能得到鎖。
優點
所有的線程都能得到資源,不會餓死在隊列中。
缺點
吞吐量會下降很多,隊列裏面除了第一個線程,其他的線程都會阻塞,cpu喚醒阻塞線程的開銷會很大。
非公平鎖
多個線程去獲取鎖的時候,會直接去嘗試獲取,獲取不到,再去進入等待隊列,如果能獲取到,就直接獲取到鎖。
優點
可以減少CPU喚醒線程的開銷,整體的吞吐效率會高點,CPU也不必喚醒所有線程,會減少喚起線程的數量。
缺點
可能導致隊列中間的線程一直獲取不到鎖或者長時間獲取不到鎖,導致餓死。