Redisson的可重入锁使用
Redisson
实现的是可重入锁,同一线程获取同一个锁返回一直是true
,每次都会更新锁的有效期
ReentrantLock
是可重入锁,那它的特点就是:同一个线程可以重复拿到同一个资源的锁。重入锁非常有利于资源的高效利用。
若是本地单元测试,则需要考虑启多个线程进行测试锁,否则可能会因可重入锁而失败
实例
依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.14.1</version>
</dependency>
demo
import java.util.concurrent.TimeUnit;
import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
public class RedisDemo {
public static void main(String[] args) throws InterruptedException {
Config config = new Config();
config.useSingleServer().setAddress("127.0.0.1:6379")
.setUsername("admin").setPassword("admin");
RedissonClient redisson = Redisson.create(config);
RLock rLock = redisson.getLock("MyLock");
// 尝试锁100s,锁等待时间1s
boolean locked = rLock.tryLock(1, 100, TimeUnit.SECONDS);
// true,redis中MyLock的值为hash值(key为"机器uuid:线程name",value为当前锁重入的计数值)
System.out.println(locked);
boolean locked2 = rLock.tryLock(1, 100, TimeUnit.SECONDS);
// 可重入锁,结果依然是true,hash的value计数变为2
System.out.println(locked2);
rLock.unlock();
}
}