賣票問題
我們現在有五個售票員
五個線程分別賣票
賣票
ReentrantLock();
運行后全是 a 對象獲取
非公平鎖缺點之一
容易出現鎖饑餓
默認是使用的非公平鎖
也可以傳入一個 true 參數
使其變成公平鎖
生活中排隊講求先來后到 視為公平
程序中的公平性也是符合請求鎖的絕對時間
其實就是 FIFO
否則視為不公平
為什么默認是非公平的
左邊是公平的版本
右邊是非公平的版本
非公平鎖是直接搶占
而公平鎖要判斷同步隊列是否有先驅節點存在
如果沒有先驅節點才能獲取鎖
非公平鎖源碼
公平鎖源碼
原因
如果是為了更高的吞吐量
很顯然非公平鎖是比較合適的
因為節省了很多線程切換時間
吞吐量自然就上去了
否則那就用公平鎖 大家公平使用