redisson分布式锁中waittime的设置

之前分布式锁中使用redisson的lock.tryLock(0,0,TimeUnit.SECONDS)

这么做的逻辑是releaseTime设置为0,实际上会使用默认的30s并触发看门狗机制

那waitTime有没有默认值呢?设置为0实际会等待多少时间?

看源码

java 复制代码
 public boolean tryLock(long waitTime, long leaseTime, TimeUnit unit) throws InterruptedException {
        long time = unit.toMillis(waitTime);
        long current = System.currentTimeMillis();
        long threadId = Thread.currentThread().getId();
        Long ttl = this.tryAcquire(waitTime, leaseTime, unit, threadId);
        if (ttl == null) {
            return true;
        } else {
            time -= System.currentTimeMillis() - current;
            if (time <= 0L) {
                this.acquireFailed(waitTime, unit, threadId);
                return false;
            } else {
            ........

这里的time直接就取的传入的waitTime,当time减少到小于0时,返回加锁失败!

所以waitTime是没有什么默认值的,这么写相当于加锁失败立刻返回

实验一下,先加一个不会过期的锁,然后另一个线程试图获取锁

java 复制代码
@Test
    public void getLock() throws InterruptedException {
        String lockKey = "testLock";
        RLock lock = redissonClient.getLock(lockKey);
        System.out.println(System.currentTimeMillis());
        Boolean isLock = lock.tryLock(0,-1,TimeUnit.SECONDS);
        System.out.println(System.currentTimeMillis());
        System.out.println(isLock);
    }

如果设置为0,在尝试获取不到锁后立刻就会返回失败

相关推荐
Dolphin_Home3 小时前
搭建 Hadoop 3.3.6 伪分布式
大数据·hadoop·分布式
姜来可期5 小时前
【分布式数据一致性算法】Gossip协议详解
分布式
begei5 小时前
理解vllm分布式推理服务中的多节点Multi-Node部署方式
分布式
南宫文凯5 小时前
Hadoop-HA(高可用)机制
大数据·hadoop·分布式·hadoop-ha
一个假的前端男7 小时前
RabbitMQ 消息队列
分布式·rabbitmq
liruiqiang058 小时前
DDD - 整洁架构
分布式·微服务·架构
刀客1238 小时前
kafka基本知识
分布式·kafka
菠菠萝宝9 小时前
【Java八股文】11-分布式及场景面试篇
java·分布式·面试·k8s·系统·uuid·mq
莳花微语10 小时前
使用MyCAT实现分布式MySQL双主架构
分布式·mysql·架构
power-辰南13 小时前
高并发系统架构设计全链路指南
分布式·系统架构·高并发·springcloud