以下是一个简单的基于Redis实现的分布式锁的Java代码示例:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.SetParams;

public class DistributedLock {

    private static final String LOCK_KEY = "distributed_lock";
    private static final int LOCK_EXPIRE_TIME = 5000; // 锁的过期时间,单位毫秒
    private static final int SLEEP_TIME = 100; // 线程休眠时间,单位毫秒

    private Jedis jedis;

    public DistributedLock(Jedis jedis) {
        this.jedis = jedis;
    }

    public boolean lock() {
        while (true) {
            // 尝试获取锁
            String result = jedis.set(LOCK_KEY, "locked", SetParams.setParams().nx().px(LOCK_EXPIRE_TIME));
            if ("OK".equals(result)) {
                return true; // 获取锁成功
            }
            // 休眠一段时间再重试
            try {
                Thread.sleep(SLEEP_TIME);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public void unlock() {
        jedis.del(LOCK_KEY);
    }
}

使用示例:

Jedis jedis = new Jedis("localhost", 6379);
DistributedLock lock = new DistributedLock(jedis);

if (lock.lock()) {
    try {
        // 执行需要保证互斥的代码
    } finally {
        lock.unlock();
    }
}

这个示例中,我们使用Redis的set命令来获取锁,其中nx选项表示只在键不存在时才设置值,px选项表示设置键的过期时间。如果获取锁成功,返回OK;否则返回null。在获取锁失败后,我们通过线程休眠一段时间再重试,以避免一直占用CPU资源。释放锁时,我们直接删除对应的键即可。

分布式锁java代码示例

原文地址: https://www.cveoy.top/t/topic/AgW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录