Java中的偏向鎖和輕量級鎖都是為了提高多線程并發操作的性能。
偏向鎖是指,當只有一個線程訪問同步塊時,JVM會將這個線程ID記錄在鎖對象的Mark Word中,下次該線程再訪問同步塊時,直接進入同步狀態,不需要做任何同步操作,從而提高了性能。偏向鎖主要適用于只有一個線程訪問同步塊的場景。當有多個線程訪問同步塊時,偏向鎖會自動撤銷。
輕量級鎖是指,當只有一個線程訪問同步塊時,JVM會在該線程的棧幀中創建一個鎖記錄(Lock Record),將鎖對象的Mark Word復制到鎖記錄中,并將鎖對象的Mark Word更新為指向鎖記錄的指針。這樣,當該線程再次進入同步塊時,不需要做任何同步操作,直接進入同步狀態。當有多個線程訪問同步塊時,輕量級鎖會自動膨脹成重量級鎖。
輕量級鎖相對于重量級鎖而言,減少了線程間的競爭和上下文切換,提高了多線程并發操作的性能,但是在多線程并發操作較為頻繁的場景下,會出現自旋等待的情況,會降低性能。因此,選擇使用偏向鎖和輕量級鎖還需要根據具體的應用場景進行綜合考慮。