欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

由于网络延迟造成逻辑锁过期的问题,lock.tryLo

来源: javaer 分享于  点击 32261 次 点评:1

由于网络延迟造成逻辑锁过期的问题,lock.tryLo


getLock {
..
网络波动,导致getLock获取的锁已过期失效,其他线程请求仍然可以执行这段逻辑
...
}

解决方案

redisson watch-dog

RLock lock = redissonClient.getLock(code + "SNAPSHOT");
try {
    lock.lock();
    // 业务逻辑
} catch (Exception e) {
    log.error("获取锁失败");
} finally {
    // 释放当前线程获取到的锁
    if (lock != null && lock.isHeldByCurrentThread()) {
        lock.unlock();
    }
}

lock.lock(): 默认自动续租,锁的过期时间默认是30s,如果当前线程没有主动释放,并且锁即将过期则锁会续期。
lock.tryLock(waitTime, leaseTime, timeUnit): 不续租获取锁方法
waitTime:等待获取锁的最长时间
leaseTime:租约时间,如果当前线程成功获取到锁,那么锁将被持有的时间长度。这个时间过后,锁会自动释放

相关栏目:

用户点评