公平鎖和非公平鎖併發
是什麼app
公平鎖就是先來後到、非公平鎖就是容許加塞,Lock lock = new ReentrantLock(Boolean fair);
默認非公平。高併發
**==公平鎖==**是指多個線程按照申請鎖的順序來獲取鎖,相似排隊打飯。ui
**==非公平鎖==**是指多個線程獲取鎖的順序並非按照申請鎖的順序,有可能後申請的線程優先獲取鎖,在高併發的狀況下,有可能會形成優先級反轉或者節現象。線程
二者區別code
公平鎖:Threads acquire a fair lock in the order in which they requested it隊列
公平鎖,就是很公平,在併發環境中,每一個線程在獲取鎖時,會先查看此鎖維護的等待隊列,若是爲空,或者當前線程就是等待隊列的第一個,就佔有鎖,不然就會加入到等待隊列中,之後會按照FIFO的規則從隊列中取到本身。it
非公平鎖:a nonfair lock permits barging: threads requesting a lock can jump ahead of the queue of waiting threads if the lock happens to be available when it is requested.thread
非公平鎖比較粗魯,上來就直接嘗試佔有額,若是嘗試失敗,就再採用相似公平鎖那種方式。request