@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
注解与使用默认名称的其他两个注解混合使用。