请用java写一个分布式锁
时间: 2023-12-21 11:04:11 浏览: 45
好的,下面是Java写分布式锁的代码示例:
1. 使用Redis实现分布式锁
```
public class DistributedLock {
private JedisPool jedisPool;
public DistributedLock(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}
public boolean tryLock(String lockKey, String lockValue, long expireTime) {
try (Jedis jedis = jedisPool.getResource()) {
String result = jedis.set(lockKey, lockValue, "NX", "PX", expireTime);
return "OK".equals(result);
}
}
public void unlock(String lockKey, String lockValue) {
try (Jedis jedis = jedisPool.getResource()) {
String value = jedis.get(lockKey);
if (lockValue.equals(value)) {
jedis.del(lockKey);
}
}
}
}
```
2. 使用Zookeeper实现分布式锁
```
public class DistributedLock {
private CuratorFramework curatorFramework;
public DistributedLock(CuratorFramework curatorFramework) {
this.curatorFramework = curatorFramework;
}
public boolean tryLock(String lockPath, String lockValue, long expireTime) throws Exception {
InterProcessMutex mutex = new InterProcessMutex(curatorFramework, lockPath);
try {
return mutex.acquire(expireTime, TimeUnit.MILLISECONDS);
} catch (Exception ex) {
throw ex;
}
}
public void unlock(String lockPath, String lockValue) throws Exception {
InterProcessMutex mutex = new InterProcessMutex(curatorFramework, lockPath);
try {
mutex.release();
} catch (Exception ex) {
throw ex;
}
}
}
```
以上两种分布式锁的实现方式,都可以在分布式环境下保证同一时间只有一个客户端操作共享资源。其中Redis实现方式适合简单的场景,Zookeeper实现方式适合复杂的场景。