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();
}
}
}
热门推荐
民法古诗词:传统与现代的法律意蕴解读
《卡赞 Khazan》2 小时试玩体验:感受冷兵器的狂放之力 | IGN 中国
固定资产成本包括什么
Logo 中的档案文化:以甲骨文 “册” 为例
音响音质不佳的原因是什么?如何有效提升音响音质?
低血压:一个被低估的健康隐患
ω-3脂肪酸(瑞胜康®)在肿瘤领域中应用
判决书写错时间4年刑期变3年,这事咋整?
半夜可以给宝宝喝水吗?这些危害家长需警惕
金樱子的功效与作用
这种浆果好吃营养多,可以经常吃
推动气血运行的锻炼方法
精神赔偿证据怎么举证责任
准备长途出行必备清单:物品&证件全攻略
醋的世界:如何选择适合你的醋?排行榜分析
上智齿太靠近上颌窦需要拔除吗?挨着上颌窦拔智齿有风险么
【科技前沿】JCB丨田烨课题组发现神经元钙震荡调节神经-肠道线粒体信号传递新机制
Cell | 何吓俤等揭示维生素C修饰以及其抗肿瘤免疫活性
冬至节:一个承载千年文化的传统节日
如何进行合理的投资决策?这种决策有哪些参考依据?
宝可梦剑盾孵蛋完全攻略:从基础知识到特殊情况、孵化方法、时间相关及特定宝可梦
电力科普(一百六十五) | 高铁、地铁、电动车……你平时通勤用多少电?
中国两型六代机首飞后 美国空军重启NGAD项目应对挑战
金樱子:从药用价值到食用方法的全面解析
汕头高考复读集训:复读生如何短时间内高效提分?
全频音箱、分频音箱、同轴音箱:各有什么优缺点
荞麦面条的制作方法和步骤(原创自制荞麦面条,健康美味粗粮美食)
智慧校园之宿舍管理系统:AI赋能,打造高效安全宿舍环境
小中风的治疗与调养
如何避免车辆违章记录的产生