返回顶部
首页 > 资讯 > 精选 >Redisson分布式闭锁RCountDownLatch如何使用
  • 550
分享到

Redisson分布式闭锁RCountDownLatch如何使用

2023-07-05 02:07:45 550人浏览 泡泡鱼
摘要

这篇文章主要介绍了Redisson分布式闭锁RCountDownLatch如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Redisson分布式闭锁RCountDownLatch如何使用文章都会有所收获,

这篇文章主要介绍了Redisson分布式RCountDownLatch如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Redisson分布式闭锁RCountDownLatch如何使用文章都会有所收获,下面我们一起来看看吧。

一、RCountDownLatch的使用

RCountDownLatch的功能跟CountDownLatch,用于实现某个线程需要等待其他线程都完成之后,我再去执行,这种场景就可以使用CountDownLatch。

@Testpublic void testRCountDownLatch() {    Config config = new Config();    config.useSingleServer().setAddress("redis://127.0.0.1:6379");    RedissonClient redissonClient = Redisson.create(config);    RCountDownLatch rCountDownLatch = redissonClient.getCountDownLatch("anyCountDownLatch");    rCountDownLatch.trySetCount(5);    for (int i = 1; i <= 5; i++) {        new Thread(() -> {            System.out.println(Thread.currentThread().getName() + "离开教师...");            rCountDownLatch.countDown();        }, "A" + i).start();    }    try {        rCountDownLatch.await();    } catch (InterruptedException e) {        throw new RuntimeException(e);    }    System.out.println("班长锁门...");}

A1离开教师...
A2离开教师...
A4离开教师...
A3离开教师...
A5离开教师...
班长锁门...

二、trySetCount()设置计数器

boolean trySetCount(long count);
public RFuture<Boolean> trySetCountAsync(long count) {    return commandExecutor.evalWriteAsync(getRawName(), LonGCodec.INSTANCE, RedisCommands.EVAL_BOOLEAN,            // 往redis中写入一个String类型的数据    anyCountDownLatch:5            "if redis.call('exists', KEYS[1]) == 0 then "                + "redis.call('set', KEYS[1], ARGV[2]); "                + "redis.call('publish', KEYS[2], ARGV[1]); "                + "return 1 "            + "else "                + "return 0 "            + "end",            Arrays.asList(getRawName(), getChannelName()), CountDownLatchPubSub.NEW_COUNT_MESSAGE, count);}

同样,在redis中写入了一个{key}:{计数器总数}的String类型的数据。

三、countDown()源码

减少锁存器的计数器。当计数达到零时通知所有等待线程。

public RFuture<Void> countDownAsync() {    return commandExecutor.evalWriteNoRetryAsync(getRawName(), LongCodec.INSTANCE, RedisCommands.EVAL_BOOLEAN,                    // 减少redis中计数器的值                    "local v = redis.call('decr', KEYS[1]);" +                    // 计数器减为0后,删除对应的key                            "if v <= 0 then redis.call('del', KEYS[1]) end;" +                    "if v == 0 then redis.call('publish', KEYS[2], ARGV[1]) end;",                Arrays.<Object>asList(getRawName(), getChannelName()), CountDownLatchPubSub.ZERO_COUNT_MESSAGE);}

四、await()源码

等到计数器达到零。

public void await() throws InterruptedException {    // 如果计数器为0,直接返回    if (getCount() == 0) {        return;    }    // 订阅redisson_countdownlatch__channel__{anyCountDownLatch}的消息    CompletableFuture<RedissonCountDownLatchEntry> future = subscribe();    RedissonCountDownLatchEntry entry = commandExecutor.getInterrupted(future);    try {        // 不断循环判断计数器的值是否大于0,大于0说明还有线程没执行完成,在这里阻塞:LockSupport.park(this)        while (getCount() > 0) {            // waiting for open state            entry.getLatch().await();        }    } finally {        unsubscribe(entry);    }}

关于“Redisson分布式闭锁RCountDownLatch如何使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Redisson分布式闭锁RCountDownLatch如何使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Redisson分布式闭锁RCountDownLatch如何使用

本文链接: https://lsjlt.com/news/349202.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Redisson分布式闭锁RCountDownLatch如何使用
    这篇文章主要介绍了Redisson分布式闭锁RCountDownLatch如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Redisson分布式闭锁RCountDownLatch如何使用文章都会有所收获,...
    99+
    2023-07-05
  • Redisson分布式闭锁RCountDownLatch的使用详细讲解
    目录一、RCountDownLatch的使用二、trySetCount()设置计数器三、countDown()源码四、await()源码本篇文章基于redisson-3.17.6版本...
    99+
    2023-02-11
    Redisson分布式闭锁 Redisson RCountDownLatch Redisson分布式闭锁RCountDownLatch
  • Redisson分布式锁
    文章目录 一、Redisson简单介绍二、Redisson简单使用1. maven引用2. RedisConfig配置3. StockRedissonService4. 测试 三、Redisson源码1. 加锁2. 解锁3. 自...
    99+
    2023-08-19
    分布式 redis java 缓存
  • 如何正确的使用redisson分布式锁
    这期内容当中小编将会给大家带来有关如何正确的使用redisson分布式锁,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Redisson是Redis官方推荐的Java版的Redis客户端。它提供的功能非常多...
    99+
    2023-06-14
  • Redisson如何实现分布式锁、锁续约
    这篇文章主要介绍了Redisson如何实现分布式锁、锁续约的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Redisson如何实现分布式锁、锁续约文章都会有所收获,下面我们一起来看看吧。一、基础0)Redisso...
    99+
    2023-07-05
  • Springboot中如何使用Redisson实现分布式锁浅析
    目录前言1. 概述2. Redisson 在 Springboot 中的使用2.1 引入依赖2.2 在 Springboot 配置中配置Redis2.3 Demo代码3. 综述前言 ...
    99+
    2024-04-02
  • 如何使用自定义注解实现redisson分布式锁
    这篇文章主要讲解了“如何使用自定义注解实现redisson分布式锁”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用自定义注解实现redisson分布式锁”吧!自定义注解实现rediss...
    99+
    2023-06-29
  • 如何理解Redisson分布式锁的源码
    本篇内容介绍了“如何理解Redisson分布式锁的源码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Red...
    99+
    2024-04-02
  • SpringBoot整合Redisson如何实现分布式锁
    这篇文章将为大家详细讲解有关SpringBoot整合Redisson如何实现分布式锁,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redisson是架设在redis基础上的一个Java驻内存数据网格(In...
    99+
    2023-06-25
  • redisson分布式锁的用法大全
    Redisson是Redis官方推荐的Java版的Redis客户端。它提供的功能非常多,此处我们只用它的分布式锁功能。 以springboot整合Redisson项目为例 添加spr...
    99+
    2024-04-02
  • 详解redis分布式锁(优化redis分布式锁的过程及Redisson使用)
    目录1. redis在实际的应用中2.如何使用redis的功能进行实现分布式锁2.1 redis分布式锁思想2.1.1设计思想:2.1.2 根据上面的设计思想进行代码实现2.2 使用...
    99+
    2024-04-02
  • Redisson分布式锁之加解锁详解
    目录引言锁的可重入性加锁锁续命释放锁引言 2023的金三银四来的没想象中那么激烈,一个朋友前段时间投了几十家,多数石沉大海,好不容易等来面试机会,就恰好被问道项目中关于分布式锁的应用,后涉及Redisson实现分布式锁...
    99+
    2023-03-19
    Redisson分布式加解锁 Redisson加解锁
  • 基于Redis分布式锁Redisson及SpringBoot集成Redisson
    目录- 分布式锁需要具备的条件和刚需- Redisson使用- SpringBoot集成Redisson- 分布式锁需要具备的条件和刚需 独占性:OnlyOne,任何时刻只能有且仅有...
    99+
    2024-04-02
  • Redisson分布式锁之加解锁源码分析
    这篇文章主要介绍“Redisson分布式锁之加解锁源码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redisson分布式锁之加解锁源码分析”文章能帮助大家解决问题。锁的可重入性我们都知道,Ja...
    99+
    2023-07-05
  • Redisson分布式信号量RSemaphore如何使用
    本文小编为大家详细介绍“Redisson分布式信号量RSemaphore如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Redisson分布式信号量RSemaphore如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-05
  • 使用自定义注解实现redisson分布式锁
    目录自定义注解实现redisson分布式锁自定义注解aop解析注解service中使用注解加锁使用redisson分布式锁应用应用场景Redisson管理类分布式锁测试类自定义注解实...
    99+
    2024-04-02
  • SpringBoot怎么整合分布式锁redisson
    这篇文章主要介绍“SpringBoot怎么整合分布式锁redisson”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot怎么整合分布式锁redisson”文章能帮助大家解决问题。1、...
    99+
    2023-07-05
  • SpringBoot整合Redisson实现分布式锁
    目录一、添加依赖二、redis配置文件三、新建配置类四、使用分布式锁可重入锁读写锁信号量(Semaphore)闭锁(CountDownLatch)Redisson是架设在redis基...
    99+
    2024-04-02
  • 如何使用分布式锁
    本篇内容主要讲解“如何使用分布式锁”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用分布式锁”吧!什么是分布式锁分布式锁又可以解决哪些问题呢在我们的系统还没...
    99+
    2024-04-02
  • Java-Redis-Redisson分布式锁的功能使用及实现
    目录前置基础设施功能使用和介绍其他悲观锁的实现方式前置 Java-Redis-Redisson配置基础上我们进行了改造,让锁的使用更加方便 基础设施 RedissonLock imp...
    99+
    2022-11-13
    Java Redis Redisson分布式锁 Java  Redisson分布式锁
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作