synchronize和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鎖適合代碼少許的同步問題。
相關文章
相關標籤/搜索