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();
}
}
}
热门推荐
越秀公园:广州最美秋景打卡地
上海出发,自驾游打卡宏村!
上海出发,景婺黄高速自驾游:篁岭晒秋不可错过!
数字农业:开启农业新时代的钥匙
劳务派遣好还是劳务外包好?
灵活用工与劳务用工的区别
皇帝马甲何其多,古代皇帝到底怎么称呼?
IPD流程全称及其在复杂项目中的实施挑战
Nginx最佳实践:高效托管你的静态资源
Nginx优化网站性能:静态资源托管指南
新能源车成主流?你的购车攻略来了!
双十一购车首付比例怎么选?这份攻略请收好!
成都西站到东站,地铁攻略大揭秘!
求职路上如何避免心态崩?
新泰高薪工作大揭秘:印刷工VS网约车司机
新泰市:特色产业带动就业热潮
八字命理帮你搞定情感难题
八字命理告诉你:你的另一半在哪里?
八字命理揭秘:你的另一半在哪儿?
八字中的爱情密码:从配偶到子女的玄学解读
东太行旅游度假区游玩全攻略:三天畅游山水美景
你家药箱里的盐酸二甲双胍缓释片,真的放对了吗?
盐酸二甲双胍缓释片:老年糖尿病治疗新突破
职场人必备:高效控糖新指南
房价跌了,房租却没降?真相揭秘!
一线城市租金回报率逼近2%,当房东还是存银行更划算?
一线城市租售比悄然生变:房价租金比达近2%,租赁市场吸引力提升
租售比告诉你:一线城市买房还是租房?
被猫抓伤怎么办?从伤口处理到疫苗接种,这份指南请收好
脸部猫抓伤急救指南:你做对了吗?