Lombok注解详解:@Synchronized与@Locked的使用方法
创作时间:
作者:
@小白创作中心
Lombok注解详解:@Synchronized与@Locked的使用方法
引用
CSDN
1.
https://blog.csdn.net/tanglei6636/article/details/142535176
Lombok是一个用于Java的代码生成库,它通过注解来减少样板代码的编写。本文将介绍Lombok中的两个注解:@Synchronized和@Locked,它们分别用于实现同步锁和可重入锁。
@Synchronized
通过锁代码块的方式实现同步锁。
当synchronized
修饰类属性时,通常用于定义同步代码块,此时需要指定一个锁对象。这个锁对象通常是类的某个私有静态成员变量,因为类属性是静态的,所以锁也应该是静态的,以确保所有访问该属性的线程都使用同一个锁。
如何使用
- 注解到需要保证线程安全的方法上。
代码示例
这里直接使用了Lombok官网的例子:
public class SynchronizedExample {
private final Object readLock = new Object();
@Synchronized
public static void hello() {
System.out.println("world");
}
@Synchronized
public int answerToLife() {
return 42;
}
@Synchronized("readLock")
public void foo() {
System.out.println("bar");
}
}
编译后:为需要保证线程安全的代码生成了同步代码块的锁
@Locked
用于实现ReentrantLock(可重入锁)。
ReentrantLock也是Java当中提供的一种锁,这种锁和synchronized
类似也可以起到互斥使用,它允许同一个线程在持有锁的情况下再次获取该锁(可重入性),保证线程安全。(ReentrantLock用起来非常简单,不了解的可以查一下ReentrantLock,,不仅方便的提供加锁、解锁方法,还提供了公平跟非公平的两种实现,本文主要介绍Lombok注解,因此不做赘述。)
如何使用
- 注解到需要使用ReentrantLock的方法上。
- 提供读、写、自定义三种级别。
代码示例
这里直接使用了Lombok官网的例子:
public class LockedExample {
private int value = 0;
private final Lock baseLock = new ReentrantLock();
@Locked.Read
public int getValue() {
return value;
}
@Locked.Write
public void setValue(int newValue) {
value = newValue;
}
@Locked("baseLock")
public void foo() {
System.out.println("bar");
}
}
编译后:生成了加锁、解锁、定义自定义锁的代码。
public class LockedExample {
@Generated
private final ReadWriteLock $lock = new ReentrantReadWriteLock();
private int value = 0;
private final Lock baseLock = new ReentrantLock();
public LockedExample() {
}
public int getValue() {
this.$lock.readLock().lock();
int var1;
try {
var1 = this.value;
} finally {
this.$lock.readLock().unlock();
}
return var1;
}
public void setValue(int newValue) {
this.$lock.writeLock().lock();
try {
this.value = newValue;
} finally {
this.$lock.writeLock().unlock();
}
}
public void foo() {
this.baseLock.lock();
try {
System.out.println("bar");
} finally {
this.baseLock.unlock();
}
}
}
热门推荐
期权交易中的做空策略是什么?做空期权时需要注意哪些风险?
部署负责任的AI的七大步骤
1kWh等于多少度电?一文读懂电能计量与节能技巧
全球市场大跌!衰退预期下的投资启示
科普 | 肩胛骨的位置和运动机制详解
一文了解NBA交易和选秀权
提高交通安全水平的关键措施
选对电视尺寸,让你的家居观影体验更上一层楼
广东人喝了100年的老火靓汤,原来是这样炖的!
运动新发现:女生注意!这种锻炼方式能更好地抑制饥饿感
运动后饥饿感增强是否代表新陈代谢加快
卫生院有哪些职位
成渝高速扩容、地铁新线即将开通 来看成都最新交通进展!
如何选择鞋的尺码
瑞士移民具体要满足哪些条件呢?比如对资产、学历等有何要求?
顽匪赵保原,成立"抗八联军"!开国元帅罗荣桓:消灭他
怎么理解和运用技术分析指标来辅助投资决策?这些技术分析指标的局限性是什么?
中超第二轮7场比赛,3张红牌引发关注,背后原因解析
健康饮食不发愁,记住这个顺口溜
生产经营单位生产安全事故应急预案编制导则的具体步骤有哪些?
出国黑中介揭秘:如何防范劳务中介诈骗
建立稳固恋爱关系的秘诀:从沟通到信任
氯雷他定可以治流鼻涕吗
睡姿与健康:卧位的科学选择
人为什么会长老人斑?红霉素软膏能够去除老人斑吗?看完涨知识了
自动驾驶与ACC场景中的安全感研究
情绪解药:新研究证明多听音乐有助于情绪调节
汉字"昏"的详细解释
汉字“昏”的文化内涵与演变
租赁合同实用指南:占用费标准、签订要点与解除方式