使用java语言写一个分布式锁
时间: 2023-09-06 21:11:01 浏览: 42
以下是一个简单的基于Redis的分布式锁实现,使用Java语言编写:
```
import redis.clients.jedis.Jedis;
public class DistributedLock {
private Jedis jedis;
private String lockKey;
private int expireTime = 5000;
private int acquiryTimeout = 1000;
private boolean locked = false;
public DistributedLock(String host, int port, String lockKey) {
jedis = new Jedis(host, port);
this.lockKey = lockKey;
}
public boolean lock() {
int timeout = acquiryTimeout;
while (timeout >= 0) {
long expires = System.currentTimeMillis() + expireTime + 1;
String expiresStr = String.valueOf(expires);
if (jedis.setnx(lockKey, expiresStr) == 1) {
locked = true;
return locked;
}
String currentValueStr = jedis.get(lockKey);
if (currentValueStr != null && Long.parseLong(currentValueStr) < System.currentTimeMillis()) {
String oldValueStr = jedis.getSet(lockKey, expiresStr);
if (oldValueStr != null && oldValueStr.equals(currentValueStr)) {
locked = true;
return locked;
}
}
timeout -= 100;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
return locked;
}
public void unlock() {
if (locked) {
jedis.del(lockKey);
}
}
}
```
使用示例:
```
DistributedLock lock = new DistributedLock("localhost", 6379, "mylock");
if (lock.lock()) {
try {
// do something
} finally {
lock.unlock();
}
}
```