使用公平锁并设置默认的Redis等待时间来保证线程的执行顺序

使用公平锁并设置默认的Redis等待时间来保证线程的执行顺序

1.首先,你可以创建一个公平锁(Fair Reentrant Lock):

复制代码
javaCopy Codeimport org.redisson.Redisson;
import org.redisson.api.RLock;

// 初始化 Redisson 实例
Redisson redisson = Redisson.create();

// 创建公平锁
RLock fairLock = redisson.getFairLock("fairLock");

2.接下来,在需要保证执行顺序的代码块中,使用公平锁以及设置默认的等待时间:

复制代码
javaCopy Codetry {
    // 尝试获取锁,最多等待10秒
    boolean locked = fairLock.tryLock(10, TimeUnit.SECONDS);
    
    if (locked) {
        // 在此处编写需要保证顺序执行的业务逻辑
    } else {
        // 未能获取到锁,处理超时逻辑
    }
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
} finally {
    fairLock.unlock();
}

在上面的示例中,通过使用 fairLock.tryLock() 方法来尝试获取公平锁,设置了默认的等待时间为10秒。如果成功获取到锁,则执行需要保证顺序执行的业务逻辑;如果获取锁超时,则可以根据业务需求进行相应处理。

3.什么是公平锁

公平锁一种多线程同步机制 ,它按照请求锁的顺序来获取锁资源,即按照线程请求锁的时间顺序来进行排队和获取锁。在公平锁中,当有多个线程同时请求获取锁资源时,锁资源会按照线程请求的先后顺序依次分配,确保先到先得的原则。

在 Java 中,ReentrantLock 类提供了可重入锁的实现,并且可以选择是否使用公平锁。通过 ReentrantLock 的构造函数可以指定创建公平锁还是非公平锁,默认情况下是非公平锁。具体来说,当使用公平锁时,线程会按照其请求锁的顺序来获取锁,而不会插队其他线程直接获取锁资源。

公平锁的优点在于能够确保资源的公平分配,避免饥饿现象的发生,但也可能会降低性能,因为每次都要考虑所有等待线程的顺序。非公平锁则更加灵活,可能会出现新请求的线程直接获取到锁资源的情况,从而提高了程序的整体吞吐量。

相关推荐
8***29315 分钟前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
CoderYanger8 分钟前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
q***062929 分钟前
Tomcat的升级
java·tomcat
多多*38 分钟前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven
青云交40 分钟前
Java 大视界 -- Java 大数据在智能物流无人配送车路径规划与协同调度中的应用
java·spark·路径规划·大数据分析·智能物流·无人配送车·协同调度
d***81721 小时前
解决SpringBoot项目启动错误:找不到或无法加载主类
java·spring boot·后端
ᐇ9591 小时前
Java集合框架深度实战:构建智能教育管理与娱乐系统
java·开发语言·娱乐
听风吟丶2 小时前
MyBatis 深度实战:从基础映射到企业级性能优化
java·tomcat
仟濹2 小时前
【Java 基础】面向对象 - 继承
java·开发语言
6***83052 小时前
微服务搭建----springboot接入Nacos2.x
java