Java中的鎖分為對象鎖和方法鎖,二者有著不同的鎖定機制和應用場景。
對象鎖:
public synchronized void method1(){ //代碼塊 }
Java中的對象鎖,是對對象的鎖進行加鎖。在一個synchronized方法或代碼塊執行時,鎖住的是當前對象,其他線程都不能對該對象執行同步的代碼塊,只有等待當前線程執行完畢后,其他線程才能獲取對象鎖進行相應的操作。
方法鎖:
public static synchronized void method2(){ //代碼塊 }
Java中的方法鎖,是對類的鎖進行加鎖。在對一個synchronized靜態方法加鎖時,鎖住的是當前類的Class對象,在同一時刻,只能有一個線程對當前類的Class對象進行操作,其他線程只能等待。
對象鎖和方法鎖的區別不僅在于鎖住的對象不同,還在于其應用場景的不同。針對于線程安全問題,若某方法對實例變量進行操作,應使用對象鎖,以確保當前對象的線程安全;若某方法對類的靜態變量進行操作,應使用方法鎖,以確保當前類的線程安全。