首页 > 其他分享 >RCountDownLatch 分布式计数器锁的使用示例

RCountDownLatch 分布式计数器锁的使用示例

时间:2024-10-30 17:10:24浏览次数:3  
标签:RCountDownLatch Thread 示例 Worker redissonClient start new 分布式

RCountDownLatch 是 Redisson 提供的一种分布式计数器锁,类似于 Java 的 CountDownLatch

它允许一个或多个线程等待其他操作完成后再执行,适用于分布式环境中需要协调多任务的场景。

以下示例设计来自ChatGPT。

1.示例场景

假设有 5 个任务,主线程需要等这 5 个任务全部完成后再继续执行。

public static void main(String[] args) {
// Create a Config instance and configure Redis connection
Config config = new Config();
config.useSingleServer().setAddress("redis://" + REDIS_HOST + ":" + REDIS_PORT).setPassword(redisPassword);
// Create a RedissonClient instance
RedissonClient redissonClient = Redisson.create(config);
// Create a RCountDownLatch instance
RCountDownLatch latch = redissonClient.getCountDownLatch("myCountDownLatch");

// Set the initial count of the latch
latch.trySetCount(5);

// Start the worker thread and wait for the count to reset to zero
new Thread(new Worker(redissonClient)).start();
new Thread(new Worker(redissonClient)).start();
new Thread(new Worker(redissonClient)).start();
new Thread(new Worker(redissonClient)).start();
new Thread(new Worker(redissonClient)).start();

try {
// The main thread is waiting for other threads to complete
latch.await();
System.out.println("All tasks have been completed, and the main thread continues to execute");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
redissonClient.shutdown();
}
System.out.println("end this demo!");
}

// Worker class that implements Runnable interface
static class Worker implements Runnable {
private final RedissonClient redissonClient;

public Worker(RedissonClient redissonClient) {
this.redissonClient = redissonClient;
}

@Override
public void run() {
RCountDownLatch latch = redissonClient.getCountDownLatch("myCountDownLatch");

try {
System.out.println("Task " + Thread.currentThread().getName() + " start");
Thread.sleep((int) (Math.random() * 3000)); // Simulate task execution
System.out.println("Task " + Thread.currentThread().getName() + " completed");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
latch.countDown(); // After each task is completed, the count is reduced by one
}
}
}

> Task :CountDownLatchExample.main()
Task Thread-1 start
Task Thread-2 start
Task Thread-3 start
Task Thread-5 start
Task Thread-4 start
Task Thread-4 completed
Task Thread-3 completed
Task Thread-1 completed
Task Thread-5 completed
Task Thread-2 completed
All tasks have been completed, and the main thread continues to execute
end this demo!

2. 使用 RCountDownLatch 在分布式系统中进行任务同步

在分布式系统中,多个 JVM 上的线程也可以通过共享的 RCountDownLatch 对象来同步任务。

只要使用相同的 Redis 服务器和相同的锁名称,就可以在多个应用实例中同步使用 RCountDownLatch

标签:RCountDownLatch,Thread,示例,Worker,redissonClient,start,new,分布式
From: https://www.cnblogs.com/wangwy/p/18516193

相关文章

  • Redisson 使用示例
    Redisson是一个Java的Redis客户端,基于Redis实现了许多分布式数据结构和功能,例如分布式锁、缓存、限流器、布隆过滤器等。以下是一些常见的Redisson使用示例,来自ChatGPT,用于自学。Redisson提供了 RLock 接口用于实现分布式锁,适用于需要同步访问共享资源的分布式应用......
  • 分布式锁实现方式
    1.基于数据库的分布式锁实现原理加锁:在数据库表中创建一个记录来表示锁,通常是使用INSERT或UPDATE语句完成。可以创建一个锁表,并在表中使用唯一的ID字段表示资源,锁被持有的标志可以使用时间戳或状态字段标记。方式1:利用数据库的行锁(如SELECTFORUPDATE)。客户......
  • 表格转文字如何实现-表格文字识别接口集成示例-快速提取表格中的文字​
    在当今信息化与智能化日新月异的时代,企业和组织面临着海量数据的处理需求,特别是在金融、法律、教育等领域,复杂而繁琐的表格数据成为一种重要的信息来源。如何快速、准确地提取表格中的文字信息,提升数据处理效率,成为越来越多企业关注的焦点。随着OCR(光学字符识别)技术的迅速发展......
  • 表格转文字如何实现-表格文字识别接口集成示例-快速提取表格中的文字​
    在当今信息化与智能化日新月异的时代,企业和组织面临着海量数据的处理需求,特别是在金融、法律、教育等领域,复杂而繁琐的表格数据成为一种重要的信息来源。如何快速、准确地提取表格中的文字信息,提升数据处理效率,成为越来越多企业关注的焦点。随着OCR(光学字符识别)技术的迅速......
  • 分布式锁
    MySQL分布式锁利用MySQL的特性:主键或者唯一索引值是唯一的。Redis分布式锁原理使用setnxkeyvalue,setnx=setifnotexists,也就是只有当key不存在时才set,key存在时不做任何操作。获取锁:setnxkeyvalue释放锁:delkey死锁死锁举例:一个程序获取锁后,在执行业务逻辑的时候......
  • 《使用Gin框架构建分布式应用》阅读笔记:p251-p271
    《用Gin框架构建分布式应用》学习第14天,p251-p271总结,总21页。一、技术总结1.Docker&DockerComposeversion:"3.9"services:api:image:apienvironment:-MONGO_URI=mongodb://admin:password@mongodb:27017/test?authSource=admin&readPreference=p......
  • JSON文件转YOLO文件示例
    文章目录前言一、步骤指南二、代码实现1.类别名称到ID的映射2.边界框转换函数3.JSON解码函数4.主程序前言将JSON标注文件转换为YOLO格式通常涉及从JSON文件中提取图像尺寸、对象类别和边界框坐标,并将这些信息格式化为YOLO格式所需的格式。YOLO格式通常要求每行包含......
  • xxl-job分布式定时任务
    xxl-job分布式定时任务官方定义:xxl-job是一个开源的分布式任务调度平台。它的核心设计目标是开发迅速、学习简单、轻量级、易扩展。主要由调度中心和执行器两部分组成,调度中心负责管理调度信息,执行器负责接收调度请求并执行任务逻辑。主要特点:简单易用:支持通过web页......
  • 一文讲明白大模型分布式逻辑(从GPU通信原语到Megatron、Deepspeed)
    1.背景介绍如果你拿到了两台8卡A100的机器(做梦),你的导师让你学习部署并且训练不同尺寸的大模型,并且写一个说明文档。你意识到,你最需要学习的就是关于分布式训练的知识,因为你可是第一次接触这么多卡,但你并不想深入地死磕那些看起来就头大的底层原理,你只想要不求甚解地理解分......
  • 机票电子行程单如何批量查验?Java机票电子行程单查验接口示例
    机票电子行程单来了,它方便了人们的出行。现如今,随着旅游、差旅市场的回暖与线上业务的蓬勃发展,机票电子行程单的需求量急剧攀升,如何高效且准确地查验这些电子行程单成为许多企业和财务部门关注的焦点。传统的人工查验流程耗时且易出错,尤其在行程单数量巨大的情况下,费时费力。......