回答

收藏

redisson重入锁上锁失败

Java技术问答 Java技术问答 55 人阅读 | 0 人回复 | 2022-01-04

  1. public boolean acquire(String lockName) { : V# z4 T7 y( y( Y/ G+ G
  2.     //声明key对象
  3.     String key = LOCK_TITLE + lockName; / k/ F, z, W  b1 Z
  4.     //获取锁对象 9 g* I. f! u( W( r6 H% Z2 @* @
  5.     RLock mylock = redissonClient.getLock(key);
  6.     //加锁,并且设置锁过期时间3秒,防止死锁的产生 uuid+threadId ' R- t3 L) M( d" }* J- x6 j
  7.     mylock.lock(3, TimeUnit.SECONDS); $ Q* }5 D5 [/ n% u- _" u" q
  8.     //加锁成功 ' u- m/ J' ^# f; o8 X
  9.     return true; ' }+ w9 u, i8 B9 ?3 J
  10. } 0 t1 q4 _2 V7 p$ B% F" W
  11. public void release(String lockName) { . h+ w/ w8 w% b. b, L1 K+ E/ _% t
  12.     String key = LOCK_TITLE + lockName;   ~; J- e8 @/ e$ ^& _6 f% |1 x" F
  13.     RLock mylock = redissonClient.getLock(key); * a. l3 g# H' t+ r7 P( v- P  `
  14.     mylock.unlock(); % q: z/ E/ s8 ?/ j
  15. }
复制代码
调用如下3 N" c: X) W5 o$ k2 \
  1.         boolean acquire = distributedRedisLock.acquire(CacheKey.REGISTER_SMS_RECALL); 6 e8 ?9 |3 t1 {
  2.         try {
  3.             if (acquire) {
  4.                 taskExecutor.execute(() -> {
  5.                     log.info("多线程测试"); ' y* w1 C7 r2 }. ?3 l! c
  6.                 });
  7.             } $ L- r* m* h6 s* m, D) G. c. U+ k
  8.         }catch (Exception e) {
  9.             log.info("{}", ExceptionUtils.getFullStackTrace(e)); * ~5 r6 J5 N" j% A: q. Z
  10.         }finally {
  11.             distributedRedisLock.release(CacheKey.REGISTER_SMS_RECALL);
  12.         }
复制代码
上锁方法如上,但是使用多线程调用的时候,上锁失败了
  1. Application_Stdout [2021-12-29 11:06:52] [traceid=yPGwkuNz,uid=,uri=/mid/test/test,host=192.168.126.47,ref=,ua=python-requests/2.26.0]  INFO  [http-nio-8089-exec-6] o.n.mid.task.SmsRecallRegisterTask[48] - 多线程测试 1 ?& z; r) W! C/ D5 a& f0 g" j8 }
  2. Application_Stdout [2021-12-29 11:06:52] [traceid=krfsFsWv,uid=,uri=/mid/test/test,host=192.168.126.47,ref=,ua=python-requests/2.26.0]  INFO  [http-nio-8089-exec-8] o.n.mid.task.SmsRecallRegisterTask[48] - 多线程测试 " ~5 v8 `+ e0 w7 G& W. T) m
  3. Application_Stdout [2021-12-29 11:06:52] [traceid=8c9RU1WK,uid=,uri=/mid/test/test,host=192.168.126.47,ref=,ua=python-requests/2.26.0]  INFO  [http-nio-8089-exec-10] o.n.mid.task.SmsRecallRegisterTask[48] - 多线程测试
复制代码
6 F5 l* u' _4 K% X

6 h# z2 q) o$ Q3 @  y
我知道答案 回答被采纳将会获得5 金钱 已有0人回答
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则