@Locked
快速鎖定!ReentrantLock
,現在更輕鬆。
@Locked
在 lombok v1.20 版本中引入。
概觀
@Locked
將方法中的所有程式碼包裝在一個區塊中,該區塊首先取得 java.util.concurrent.locks.ReentrantLock
,並在方法結束時解鎖。它與 @Synchronized
非常相似。
您可以選擇性地命名一個欄位,該欄位必須是 ReentrantLock
;在這種情況下,lombok 會鎖定該欄位。否則,註解預設為名為 $LOCK
(在靜態方法上)/ $lock
(在實例方法上)的欄位,如果該欄位尚不存在,lombok 將會產生它。
此外,還有 @Locked.Read
和 @Locked.Write
註解。這些使用 java.util.concurrent.locks.ReadWriteLock
(特別是 ReentrantReadWriteLock
)。使用 @Locked.Write
註解的方法將鎖定寫入鎖,而使用 @Locked.Read
註解的方法將鎖定讀取鎖。在需要時,將會產生 java.util.concurrent.locks.ReentrantReadWriteLock
。
當使用 虛擬線程(在 Java 20 中引入) 時,相較於 @Synchronized
的功能,更推薦使用這些鎖。
使用 Lombok
import lombok.Locked;
|
原生 Java
public class LockedExample {
|
支援的配置鍵
-
lombok.locked.flagUsage
= [warning
|error
] (預設值:未設定) - 如果已配置,Lombok 將會把任何
@Locked
的使用標記為警告或錯誤。
注意事項
由於 @Locked.Read
和 @Locked.Write
使用與 @Locked
不同類型的鎖,因此若未明確指定包含鎖物件的欄位名稱,則這些註解不能在同一個鎖物件上使用。@Locked
、@Locked.Read
和 @Locked.Write
註解的預設欄位名稱相同,因此無法在使用預設名稱的情況下,將基本的 @Locked
註解與其他兩個混合使用。