synchronized和lock區(qū)別

1.首先synchronized是java內(nèi)置關(guān)鍵字,是在jvm層面的;而Lock是個接口,是jdk層面的;

2.synchronized可以修飾一個方法,Lock不行

3.synchronized無法判斷是否獲取鎖的狀態(tài),Lock可以判斷是否獲取到鎖;

4.synchronized會自動釋放鎖(a?線程執(zhí)行完同步代碼會釋放鎖 ;b 線程執(zhí)行過程中發(fā)生異常會釋放鎖),Lock需在finally中手工釋放鎖(unlock()方法釋放鎖),否則容易造成線程死鎖;

5.用synchronized關(guān)鍵字的兩個線程1和線程2,如果當(dāng)前線程1獲得鎖,線程2線程等待。如果線程1阻塞,線程2則會一直等待下去,而Lock鎖就不一定會等待下去,如果嘗試獲取不到鎖,線程可以不用一直等待就結(jié)束了;

6.synchronized的鎖可重入、不可中斷、非公平,而Lock鎖可重入、可中斷、可設(shè)置是否公平

7.Lock可以使用讀鎖提高多線程讀效率。

8.Lock鎖適合大量同步的代碼的同步問題,synchronized鎖適合代碼少量的同步問題。

?著作權(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ù)。

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