public void test() throws Exception {
boolean lock = redisService.lock("key_lock", 1, 2);
while (!lock) {
lock = redisService.lock("key_lock", 1, 2);
}
long startTime = System.currentTimeMillis();
System.out.println((startTime)/1000%60);
redisService.deleteLock("key_lock");
}
在并发的环境下,deleteLock释放锁时,假设A线程在执行业务逻辑时,锁已经失效,此时B线程获取锁,
同时C线程在等待,然后A线程的业务逻辑已经执行完成释放锁,然而这是A线程的锁早就过期了,这个时候释放的是B线程的锁,导致C线程也进来了。
解决方案:
可根据实际业务,比如根据存入的value,当value是自己的值时才去释放锁。