synchronized關鍵字可以修飾普通方法,靜態方法,當修飾普通方法,鎖對象是當前對象,當修飾靜態方法,鎖對象是當前類的class
synchroinzed關鍵字可以使用同步代碼塊實現同步,此時可以指定鎖對象。
同步方法的實現方式
同步代碼塊的實現方式
鎖的升級
鎖升級是多個線程經過synchronized包裹的代碼片段或方法,鎖的類型的變化過程。 鎖升級只能是升級過程,沒有降級過程。
第一種狀態,無鎖狀態
普通方法調用,不帶同步代碼塊的代碼執行都是無鎖狀態,多個線程可同時執行這樣的方法和代碼
第二種狀態,偏向鎖狀態
當只有一個線程執行同步代碼塊,同步方法時,此時處於偏向鎖狀態,當這個線程進入同步方法或同步代碼塊之前。
第三種狀態,輕量級鎖狀態
第四種狀態,重量級鎖狀態