當前位置:編程學習大全網 - 行動軟體 - synchronized和lock的區別

synchronized和lock的區別

synchronized和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鎖適合代碼少量的同步問題。

性能比較:

synchronized和Lock在性能上差別不大。在實現上有壹些區別。

synchronized 采用的是悲觀鎖機制,synchronized 是托管給 JVM 執行的。在JDK1.6以後采用了偏向鎖、輕量級鎖、重量級鎖及鎖升級的方式進行優化。

而 Lock 用的是樂觀鎖機制。控制鎖的代碼由用於自定義,也采用CAS自旋鎖進行了優化。

  • 上一篇:中國人民解放軍軍旗上的“八壹”代表什麽意思?
  • 下一篇:hp laserjet pro mfp m126nw 激光多功能壹體機硒鼓怎麽取出來
  • copyright 2024編程學習大全網