redisson的isHeldByCurrentThread的使用解释

在thread-1还没有结束的时候,也就是在thread-1在获得锁但是还没有释放锁的时候, `thread-2由于被别的线程中断停止了等待从lock.tryLock的阻塞状态中返回继续执行接下来的逻辑,并且由于尝试去释放一个属于线程thread-1的锁而抛出了一个运行时异常导致该线程thread-2结束了, 然而thread-2完成了一系列操作后,线程thread-1才释放了自己的锁. 所以thread-2并没有获得锁,却执行了需要同步的内容,还尝试去释放锁。那解决方式我们就知道了,当前线程加的锁由当前线程去解锁,也就是说当我们使用lock.unlock的时候加上线程的判断即可。

 RLock lock = redissonClient.getLock(key);
    if(lock.isLocked()){ // 是否还是锁定状态
      if(lock.isHeldByCurrentThread()){ // 时候是当前执行线程的锁
        lock.unlock(); // 释放锁
      }
    }

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Redisson 是一个基于 Redis 的 Java 驻内存数据网格和分布式锁的开源客户端。它提供了许多简单易用的功能,可以方便地操作 Redis 数据库。 以下是 Redisson 的简单使用步骤: 1. 引入 Redisson 依赖:在 Maven 项目中,在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.15.5</version> </dependency> ``` 2. 创建 Redisson 客户端:使用 RedissonClient 接口创建一个 Redisson 客户端实例,连接到 Redis 服务器。例如,可以使用 Redisson.create() 方法创建一个默认配置的 Redisson 客户端实例: ```java import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; public class RedissonExample { public static void main(String[] args) { // 创建配置对象 Config config = new Config(); config.useSingleServer().setAddress("redis://127.0.0.1:6379"); // 创建Redisson客户端 RedissonClient redisson = Redisson.create(config); // 关闭Redisson客户端 redisson.shutdown(); } } ``` 3. 使用 Redisson 客户端操作 Redis 数据库:通过 RedissonClient 实例,可以使用各种方法来操作 Redis 数据库。例如,可以使用 RMap、RLock 等接口来进行数据的增删改查、分布式锁的获取和释放等操作。 ```java import org.redisson.api.RMap; import org.redisson.api.RLock; public class RedissonExample { public static void main(String[] args) { // ... // 获取一个 Map 对象,并进行操作 RMap<String, String> map = redisson.getMap("myMap"); map.put("key1", "value1"); map.put("key2", "value2"); System.out.println(map.get("key1")); // 输出: value1 // 获取一个分布式锁,并进行操作 RLock lock = redisson.getLock("myLock"); lock.lock(); try { // 执行需要加锁的代码块 System.out.println("Locked"); } finally { lock.unlock(); } // ... } } ``` 以上是 Redisson 的简单使用示例。根据具体需求,你可以使用 Redisson 提供的丰富功能来操作 Redis 数据库,如分布式集合、分布式对象、分布式服务等。你可以参考 Redisson 的官方文档和示例代码来深入了解更多功能和用法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值