synchronized是Java中的關鍵字,是一種同步鎖。它修飾的對象有以下幾種:
1. 修飾一個代碼塊,被修飾的代碼塊稱爲同步語句塊,其作用的範圍是大括號{}括起來的代碼,作用的對象是調用這個代碼塊的對象;2. 修飾一個方法,被修飾的方法稱爲同步方法,其作用的範圍是整個方法,作用的對象是調用這個方法的對象;
3. 修改一個靜態的方法,其作用的範圍是整個靜態方法,作用的對象是這個類的所有對象;
4. 修改一個類,其作用的範圍是synchronized後面括號括起來的部分,作用主的對象是這個類的所有對象。
synchronized 對象鎖底層實現原理
每個java 對象在JVM存儲中都對應一個對象頭,頭部信息中存儲對象的鎖狀態,class 文件中同步方法塊中會有一個進入鎖標識,多線程訪問時,會首先校驗當前對象的鎖狀態,利用CAS方法嘗試獲取鎖,同時只能有唯一線程獲取該對象鎖,從而達到併發的效果。
ReentrantLock 是Java 的一個可重入鎖。提供兩種加鎖方式 :公平鎖和非非公平鎖。