RLock锁的使用

 

try {
    RLock lock = redissonClient.getLock("ppt:pos:sms:code:lock:" + "orderSmsCode");
    System.out.println("得到的锁");
    //尝试获取锁
    boolean success = lock.tryLock(30, 60, TimeUnit.SECONDS);
    if(success){
        System.out.println("获取锁成功");
    }

    // 如果当前线程还持有锁,则释放锁(防止超过一定时间,自动解锁)
    if(lock.isHeldByCurrentThread()) {
        lock.unlock();
    }
} catch (InterruptedException e) {
    e.printStackTrace();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RLock 是 Python 中的一个线程对象,它允许多个线程同时访问一个共享资源,但是只允许一个线程修改该共享资源。在使用 RLock 进行加时,同一个线程可以多次加,每次加都会增加的层数,解时也需要解除对应层数的。 关于自动续,RLock 并没有提供直接的支持。如果需要实现自动续的功能,可以结合使用 RLock 和 threading.Timer 对象,代码大致如下: ```python import threading class AutoRenewRLock: def __init__(self): self.rlock = threading.RLock() self.timer = None def acquire(self, timeout=None): self.rlock.acquire() if timeout is not None: self.timer = threading.Timer(timeout, self.acquire) self.timer.start() def release(self): self.rlock.release() if self.timer is not None: self.timer.cancel() self.timer = None ``` 在上面的代码中,我们将 RLock 封装在 AutoRenewRLock 类中,并添加了 acquire 和 release 方法。其中 acquire 方法允许传入一个 timeout 参数,表示自动续的时间。如果 timeout 不为 None,则会创建一个 Timer 对象,在 timeout 秒后再次调用 acquire 方法,从而实现自动续的功能。当调用 release 方法时,会取消 Timer 对象,确保的正确释放。 使用时,可以将 AutoRenewRLock 对象当作普通的 RLock 对象来使用,例如: ```python lock = AutoRenewRLock() def func(): with lock: # do something ``` 在上面的例子中,通过 with 语句自动获取和释放,同时也自动续,确保共享资源在一定时间内不会被其他线程抢占。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值