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();
}
}
}
热门推荐
电磁炉和电陶炉哪个省电?从优缺点分析哪个更省电
智能化体育运动设备在提升运动表现中的应用
鹰击21批量列装,052D或将成下一个"航母杀手"
银行定期存款利率调整对短期理财的影响
探析《画江湖之不良人》对传统文化再现的贡献
大火的AI大模型怎样助力车路协同更好的优化智能驾驶量产落地?
电陶炉好还是电磁炉好?哪个更省电?
日本三大歌姬指的是谁
沙溪古镇最佳游玩时间:春秋两季气候宜人景色迷人
如何评估汽车的动力性能?评估动力性能时需考虑哪些因素?
本地部署DeepSeek-R1模型每个版本的配置要求及适合场景(建议收藏)
关羽真的是被孙权所杀?关羽被杀过程中的几个疑点
温柔的本质是理性,而理性的极致是冷漠
口腔有口臭怎么治疗好的快
如何防止团队相互甩锅
全校倡议“不包书皮”引发家长圈热议
十二时辰天干地支推算口诀
新生儿洗澡的适宜时间
新能源电池怎么检测衰减?新能源电池健康度怎么查?
世界精神卫生日:中医穴位按摩,心灵解压之道
鼻疖肿用什么抗生素软膏
“又富又美”的玉面狐狸为什么喜欢牛魔王?
长江存储持股超68%!武汉新芯启动IPO辅导
糖尿病患者的五种主要食疗方法
2024年执业兽医师考前注意事项!
PRO-Face C:基于端云协同特征补偿的隐私保护人脸识别
桑葚山茱萸同吃伤肾吗?揭秘健康食用之道
多重共线性检验修正Stata教程
《玄浑道章》的写作风格是什么?
粕强油弱还能走多远?