【Redisson starter】 可重入锁 Reentrant Lock

Metadata

title: 【Redisson starter】 可重入锁 Reentrant Lock
date: 2023-01-22 21:42
tags:
  - 行动阶段/完成
  - 主题场景/组件
  - 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
  - 细化主题/Module/Redisson
categories:
  - Redisson
keywords:
  - Redisson
description: 【Redisson starter】 可重入锁 Reentrant Lock 一个线程带等待 time/waitTime时长后如果还没有获取到锁,那么当前线程将会放弃获取锁资源的机会,去干其他事情。Async结尾的几个方法主要就是异步加锁的意思。

【Redisson starter】 可重入锁 Reentrant Lock

boolean tryLock();

boolean tryLock(long time, TimeUnit unit) throws InterruptedException;

boolean tryLock(long waitTime, long leaseTime, TimeUnit unit) throws InterruptedException;

RFuture<Boolean> tryLockAsync(long waitTime, long leaseTime, TimeUnit unit);

RFuture<Boolean> tryLockAsync();

RFuture<Boolean> tryLockAsync(long threadId);

 RFuture<Boolean> tryLockAsync(long waitTime, TimeUnit unit);

 RFuture<Boolean> tryLockAsync(long waitTime, long leaseTime, TimeUnit unit, long threadId);

time:等待锁的最长时间。
unit:时间单位。
waitTime:与time一致,等待锁的最长时间。
leaseTime:锁的过期时间。
threadId:线程id。

一个线程带等待 time/waitTime时长后如果还没有获取到锁,那么当前线程将会放弃获取锁资源的机会,去干其他事情。Async结尾的几个方法主要就是异步加锁的意思。

 /**
     * 可中断锁
     * @param lockName 锁名称
     * @param waitTimeout  等待时长
     * @param unit 时间单位
     * @return
     */
    public boolean tryLock(String lockName, long waitTimeout, TimeUnit unit) {
        checkRedissonClient();
        RLock lock = getLock(lockName);
        try {
            boolean res = lock.tryLock(waitTimeout,unit);
            if (!res) {
                log.debug(" get lock fail ,lockKey:{}", lockName);
                return false;
            }
            log.debug(" get lock success ,lockKey:{}", lockName);
            return true;
        } catch (Exception e) {
            log.error(" get lock fail,lockKey:{}, cause:{} ",
                    lockName, e.getMessage());
            return false;
        }
    }