面試題之手寫lock鎖

面試題之手寫lock鎖

1、首先創(chuàng)建一個類、隨便叫啥名,實現(xiàn)一下lock,大概有這么幾個接口需要實現(xiàn)

2、上篇文章我們總結(jié)了幾個重要點,這里在回顧下

????(1) 調(diào)用lock方法加鎖

????(2) 通過cas加鎖

????(3)加鎖成功設(shè)置擁有者為當(dāng)前線程

????(4) 加鎖失敗,加入等待隊列,線程休眠

????(5) 調(diào)用unlock方法解鎖,釋放鎖之后喚醒隊列線程

最主要實現(xiàn)lock(),tryLock(),unlock()方法

3、首先我們需要設(shè)置擁有者線程,我們用原子類(AtomicReference)來保證線程安全

4、建立一個阻塞隊列(LinkedBlockingQueue),將加鎖失敗的線程,添加入隊列

5、TryLock方法

通過cas進行加鎖,如果cas成功則返回true,如果失敗則返回false

6、lock方法

調(diào)用tryLock方法加鎖,如果加鎖失敗,將線程加入wait隊列,進行線程休眠(park),被喚醒后把當(dāng)前線程從隊列移除

7、unlock方法

通過cas方法釋放鎖,釋放鎖成功喚醒(unpark)隊列中的線程

8、運行試一下效果

將ReentrantLock替換成自己寫的HandwritingLock,運行一下看看效果,案例看上一篇文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容