redisson 是 利用redis 的单线程 和 第一次设置值返回true 在 设置相同值 返回false 的特点进行加锁的.
如果返回true说明是第一次设置值,false,说明不是第一次,我们让第一次结束时删除值,解除对资源的占用.达到解锁的目的
<!--redis 锁 客户端-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.8.2</version>
</dependency>
使用非阻塞的方式加锁
String account2 = validAccount.getAccount();
account2=account2+"_Lock";
RLock lock = redissonClient.getLock(account2);
boolean b1 = lock.tryLock();//加锁
if (!b1){
String name = Thread.currentThread().getName();
System.out.println(name+"_--获取锁失败 "+account2);
return false;
}
try{
//lock.lock(30,TimeUnit.SECONDS);
String name = Thread.currentThread().getName();
System.out.println(name+"_--拿到锁 "+account2);
Thread.sleep(50000);
}finally {
String name = Thread.currentThread().getName();
System.out.println(name+"_--释放锁 "+account2);
lock.unlock();//释放锁
}
阻塞的方式加锁
String account2 = validAccount.getAccount();
account2=account2+"_Lock";
RLock lock = redissonClient.getLock(account2);
try{
lock.lock(30,TimeUnit.SECONDS);//加锁
//拿到锁,拿不到在上一行等待
String name = Thread.currentThread().getName();
System.out.println(name+"_--拿到锁 "+account2);
Thread.sleep(50000);
}finally {
String name = Thread.currentThread().getName();
System.out.println(name+"_--释放锁 "+account2);
lock.unlock();//解锁
}