java用分布式锁,防止订单重复提交,代码示例
时间: 2023-06-30 09:09:59 浏览: 111
java版的分布式锁示例源码(Redission).zip
在Java中使用分布式锁可以用Redis实现。下面是一个防止订单重复提交的示例代码:
```java
public boolean submitOrder(String orderId) {
// 尝试获取分布式锁
String lockKey = "submitOrder_" + orderId;
String lockValue = UUID.randomUUID().toString();
boolean locked = redisClient.setNx(lockKey, lockValue, 60); // 设置锁的过期时间为60秒
if (!locked) {
return false; // 获取锁失败,说明已经有其他线程正在处理该订单
}
try {
// 执行订单提交操作
// TODO:...
// 订单提交成功后删除锁
redisClient.del(lockKey);
} catch (Exception e) {
// 订单提交失败或发生异常时也需要删除锁
redisClient.del(lockKey);
throw e;
}
return true;
}
```
在上述代码中,使用`setNx`方法尝试获取分布式锁,如果返回值为`false`则说明已经有其他线程正在处理该订单,直接返回即可。如果`setNx`返回值为`true`,则说明当前线程已经成功获取到了锁,可以执行订单提交操作。在订单提交成功后,需要使用`del`方法删除锁,以便其他线程可以获取该锁并处理其他订单。如果订单提交失败或发生异常,也需要删除锁,以免其他线程一直无法获取该锁。
阅读全文