Java面試常見問題--Sychronized 和 lock的區別


最近幾次面試總是遇到這個問題,因此在這里我特意將這個總結一下:
    

Sychronized 和 lock的區別
1.首先synchronized是java內置關鍵字,在jvm層面,
  Lock是個java提供的一個接口;

2.synchronized無法判斷是否獲取鎖的狀態,Lock可以判斷是否獲取到鎖;

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

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

5.synchronized的鎖可重入、不可中斷、非公平,而Lock鎖可重入、
可判斷、可公平(兩者皆可)

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

7. 在競爭不是很激烈的情況下,也就是線程數量比較少的情況下,sychornized的性能要優於lock,但是在競爭很激烈的情況下 。 sychornized的性能會下降,lock的性能能維持常態


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM