Java中Synchronized 和ReentrantLock的用法

synchronized是Java中的關鍵字,是一種同步鎖。它修飾的對象有以下幾種: 

1. 修飾一個代碼塊,被修飾的代碼塊稱爲同步語句塊,其作用的範圍是大括號{}括起來的代碼,作用的對象是調用這個代碼塊的對象; 
2. 修飾一個方法,被修飾的方法稱爲同步方法,其作用的範圍是整個方法,作用的對象是調用這個方法的對象; 
3. 修改一個靜態的方法,其作用的範圍是整個靜態方法,作用的對象是這個類的所有對象; 

4. 修改一個類,其作用的範圍是synchronized後面括號括起來的部分,作用主的對象是這個類的所有對象。

synchronized 對象鎖底層實現原理

每個java 對象在JVM存儲中都對應一個對象頭,頭部信息中存儲對象的鎖狀態,class 文件中同步方法塊中會有一個進入鎖標識,多線程訪問時,會首先校驗當前對象的鎖狀態,利用CAS方法嘗試獲取鎖,同時只能有唯一線程獲取該對象鎖,從而達到併發的效果。


ReentrantLock 是Java 的一個可重入鎖。提供兩種加鎖方式 :公平鎖和非非公平鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章