java 分布式锁代码
时间: 2023-07-06 21:34:19 浏览: 44
以下是一个简单的基于 Redis 实现的 Java 分布式锁代码示例:
```
import redis.clients.jedis.Jedis;
public class RedisDistributedLock {
private static final String LOCK_KEY_PREFIX = "lock:";
private Jedis jedis;
public RedisDistributedLock(String host, int port) {
jedis = new Jedis(host, port);
}
public boolean acquireLock(String lockName, long expireTime) {
String lockKey = LOCK_KEY_PREFIX + lockName;
long currentTime = System.currentTimeMillis();
long lockTimeout = currentTime + expireTime;
String result = jedis.set(lockKey, String.valueOf(lockTimeout), "NX", "PX", expireTime);
return "OK".equals(result);
}
public void releaseLock(String lockName) {
String lockKey = LOCK_KEY_PREFIX + lockName;
jedis.del(lockKey);
}
}
```
使用示例:
```
RedisDistributedLock lock = new RedisDistributedLock("localhost", 6379);
if (lock.acquireLock("myLock", 1000)) {
try {
// 执行需要加锁的逻辑
} finally {
lock.releaseLock("myLock");
}
} else {
// 获取锁失败
}
```
这个示例中使用了 Redis 的 SET command 和 DEL command 实现了分布式锁。在 acquireLock 方法中,我们将 lockKey 设置为一个具有过期时间的值,并使用 NX(不存在则设置)选项来保证这个 key 只会被设置一次。如果设置成功,就说明获取到了锁;否则,就说明锁已经被其他进程占据了。在执行需要加锁的逻辑之前,我们需要检查是否成功获取到了锁;在逻辑执行完毕后,我们需要调用 releaseLock 方法来删除这个 key,释放锁。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)