volitale、synchronized、RetreenLock區別


synchronized和RetreenLock鎖區別

1、synchronized是java關鍵字,RetreenLock是個java類

2、synchronized無法獲取鎖狀態,Lock可以判斷是否持有鎖

3、synchronized會自動釋放鎖,Lock需要在finally中unlock()手動釋放鎖

4、使用synchronized,線程1獲取鎖,線程2只能等待;使用Lock,線程1獲取鎖,線程2會嘗試獲取鎖,如果獲取不到,不會一直等待,可以直接結束。

5、synchronized和Lock都是可重入,可中斷的    Synchronized可重入鎖分析   OR    Synchronized可重入鎖通俗易懂的簡單分析

6、synchronized適合代碼量少的同步,Lock適合大量代碼同步

volitale和synchronized的區別

  • volitale關鍵字提供了一個功能,就是被其修飾的變量在被修改后會被強制刷入到主內存中,

    其他處理器的緩存由於遵守了緩存一致性原則,會把這個變量的值從主內存中加載到自己的

    緩存中,因此在並發編程中保證了變量的可見性。

  • volitale關鍵字會禁止指令重排,從而來保證有序性
  • volitale關鍵字不能保證原子性

 

  • synchronized可以保證原子性,通過字節碼指令monitorenter和monitorexit。
  • synchronized可以保證可見性
  • synchronized關鍵字保證同一時刻只允許一條線程操作,從而保證了有序性

 

PS:多個線程訪問同一個變量時,一個線程修改了這個變量的值,其他線程能夠立即看到修改后的值,這就是可見性。


免責聲明!

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



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