实现java防止重复提交请求的代码
时间: 2023-06-05 13:04:40 浏览: 179
以下是一种实现Java防止重复提交请求的代码示例:
```
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
public class AntiDuplicateRequest {
private static final ReentrantLock lock = new ReentrantLock();
private static final long TIME_TO_WAIT_MS = 5000; // 每次提交等待的时间
public static boolean hasDuplicateRequest() {
boolean hasDuplicate = false;
try {
// 尝试获取锁
if (lock.tryLock(TIME_TO_WAIT_MS, TimeUnit.MILLISECONDS)) {
// 如果获取到锁,则表示此次请求是第一次提交
// 在执行完成并释放锁之前,其他请求将不会获得锁,从而实现防止重复提交的效果
hasDuplicate = false;
} else {
// 如果在规定的时间内未获取到锁(即有其他线程已经获得了锁),则认为是重复提交
hasDuplicate = true;
}
} catch (InterruptedException e) {
// 如果在等待期间被中断,则认为是重复提交
hasDuplicate = true;
}
return hasDuplicate;
}
public static void main(String[] args) {
if (hasDuplicateRequest()) {
System.out.println("请求被拒绝:重复提交");
return;
}
// 执行提交操作
// ...
// 释放锁
lock.unlock();
}
}
```
注意,在使用此代码时,必须确保每次提交请求都会调用 `lock.unlock()` 来释放锁。如果未及时释放锁,可能会导致其他请求无法获得锁,从而一直处于等待状态,进而影响系统性能和稳定性。
阅读全文