面試題之手寫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,運行一下看看效果,案例看上一篇文章

