锁竟然冲突了,两个请求同时获取到了锁,请问可以怎么避免吗
RLock lock = redisson.getLock(String.format(REWARD_CARD_LOCK_KEY, 2));
try {
//尝试加锁,最多等待10秒,上锁以后10秒自动解锁
if (lock.tryLock(10,10, TimeUnit.SECONDS)) {
try {
//处理
logger.info("tryLock thread---{}, lock:{}", Thread.currentThread().getId(), lock);
} catch (Exception e) {
} finally {
//解锁
lock.unlock();
}
}
} catch (InterruptedException e) {
//处理
//保留中断发生的证据,以便调用栈中更高层的代码能知道中断,并对中断作出响应
Thread.currentThread().interrupt();
}
在函数或者语句块加一个同步处理机制看看。
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
已解决,log中多次获取到锁是因为在trylock之前,也就是没lock的时候当然可以多次获取到未lock的锁。谢谢各位
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y