Redission分布式锁触发看门狗机制,事件一直持有锁解决方案

注意!!!确保已经正确配置和启动了Redisson客户端,并将其传递给Redisson.create()方法中的Config对象。这里配置就没有提供,很简单的配置,主要解决方法看下面

import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RLockListener;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class CareerAdvisor {

    public void serveAsCareerAdvisor() {
        RedissonClient redissonClient = Redisson.create(config);

        RLock lock = redissonClient.getLock("myLock");
        lock.lock();

        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<Void> future = executor.submit(() -> {
            lock.addListener(new RLockListener() {
                @Override
                public void onLockReleased() {
                    // 锁被释放时调用的逻辑
                    // 可以在这里通知其他等待任务获取锁
                }
            });

            try {
                Thread.sleep(30000); // 设置监听锁状态的时间,30秒
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }

            lock.forceUnlock(); // 强制释放锁

            return null;
        });

        try {
            // 你要写的业务逻辑
        } finally {
            future.cancel(true); // 取消监听锁状态的任务
            lock.unlock(); // 正常释放锁
            executor.shutdown(); // 关闭ExecutorService
        }
    }

    public static void main(String[] args) {
        CareerAdvisor careerAdvisor = new CareerAdvisor();
        careerAdvisor.serveAsCareerAdvisor();
    }
}

在上面的代码中,创建了一个名为"myLock"的分布式锁,并通过lock.lock()方法获取锁。使用ExecutorService创建了一个单线程的执行器,并通过submit()方法提交了一个任务,该任务中设置了一个监听器来监视锁的状态,并在30秒后无论如何强制释放锁。在任务执行期间,可以在注释处编写并执行你后面的业务逻辑。无论任务是否正常完成或被中断,都确保在finally块中取消监听锁状态的任务并正常释放锁。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值