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();
}
}
}
热门推荐
产权清晰的必备要件及房屋产权纠纷处理指南
最高院:工业厂房是不是商品房?能不能适用商品房销售管理办法?
换刹车油的正确步骤
70岁老人半月板磨损怎么办
《市政桥梁工程数字化建造标准》落地实施
氨基酸结构
自然界的抗癌勇士:揭秘NK细胞的神奇力量
风湿病患者食用豆制品的注意事项
150平奶油极简风装修,打造甜而不腻温馨住宅!
云南腾冲度假村推荐与攻略:热门景点、住宿选择、美食体验一站式指南
上火口臭喝什么茶?最有效的降火茶推荐!
未来汽车EE架构趋势:从分布式到分区式
楚留香传奇演员表
电磁波的基本性质与应用
地坪龟裂纹怎么处理
女贞子泡水喝的正确方法
食品添加剂新国标实施在即 脱氢乙酸钠使用范围调整有何影响?
如何减少数据库数据冗余
如何理性看待生活中的各种压力?这些压力可以通过哪些方式缓解?
放下的智慧:如何在生活中实践放下
盘中创历史新高A股名单一览:多只机器人概念股在列 北交所个股占据九席
长期持股就能躺赢?别天真了
如何评估投资黄金首饰的利弊?这种投资方式的风险如何控制?
跨境电商海外KOL推广实战指南:从选人到变现,一步到位
高血压患者头晕怎么办?原因分析与应对指南
乌金木——一种珍贵的树种(乌金木的特征、生长环境和用途)
专业翻译的发展前景怎么样
材质不同的吸音棉和隔音棉区别
吸声棉与隔音棉的本质与应用的区别
产业热点|开心麻花为何会在国产喜剧中杀出重围?