分布式锁java代码示例
以下是一个简单的基于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资源。释放锁时,我们直接删除对应的键即可。
原文地址: https://www.cveoy.top/t/topic/AgW 著作权归作者所有。请勿转载和采集!