回答

收藏

redisson重入锁上锁失败5金钱.anslist{background:url(source/plugin/keke_

技术问答 技术问答 124 人阅读 | 0 人回复 | 2023-09-11

    ( w" k8 l* q; Y+ e- u% U6 b
  • public boolean acquire(String lockName) {
    - Z+ ?3 h, Y' C
  •     //声明key对象
    ( }; j! P' c0 M9 X/ e! Z- R
  •     String key = LOCK_TITLE + lockName;
    4 A; [- R" [1 v- ^* J
  •     //获取锁对象2 U% R, F" a$ \5 G4 u
  •     RLock mylock = redissonClient.getLock(key);+ x+ G: M: f( Q& h! W& r
  •     //加锁,并且设置锁过期时间3秒,防止死锁的产生 uuid+threadId% Z  n$ I' Z5 e( S1 _: E9 w+ }
  •     mylock.lock(3, TimeUnit.SECONDS);
    0 M% _% ]' J5 h9 Q1 `
  •     //加锁成功
    $ ~3 Z6 U" D. w# b- g4 C# n  G
  •     return true;
    8 ]; V+ n7 J, {
  • }
    0 c: _% j, C8 X' S2 V5 g* X. e
  • ' d5 d$ l* }$ l% v
  • public void release(String lockName) {
    6 W  _5 D' t8 Y: q$ E: c4 P
  •     String key = LOCK_TITLE + lockName;
    / b6 K# I" o6 E1 b& @
  •     RLock mylock = redissonClient.getLock(key);1 ?# n, L- r# n/ u( s+ p7 E
  •     mylock.unlock();$ I! J% H) |3 m8 u3 x
  • }! j& r3 H& y# `1 ?1 b. X$ S* ~
调用如下
; w  X' o" I4 e' k  m
    9 P- @  ]& y5 g5 a; r
  •         boolean acquire = distributedRedisLock.acquire(CacheKey.REGISTER_SMS_RECALL);, j: A/ w9 S' f, _
  •         try {
    ( ^6 f& D$ u- s& L  }
  •             if (acquire) {
    1 @$ J/ ]" G2 m/ B
  •                 taskExecutor.execute(() -> {9 x9 G, d6 Q) _7 N. i
  •                     log.info("多线程测试");
    3 W5 O; o2 B8 c, q; |2 h  ?
  •                 });7 r6 O# O2 ^, m  d# o) C/ O3 N$ K7 k
  •             }2 F; t; z/ `# W7 m8 v& W, I( R7 ^! {
  •         }catch (Exception e) {
    8 s0 z& T. e/ I2 U
  •             log.info("{}", ExceptionUtils.getFullStackTrace(e));
    + `' _& Q' V- l  `$ {( j4 v, k
  •         }finally {, C) v. O' s0 B/ n  R$ \
  •             distributedRedisLock.release(CacheKey.REGISTER_SMS_RECALL);        }
    2 T: y2 u0 s; ]1 s
上锁方法如上,但是使用多线程调用的时候,上锁失败了

    & F  b7 N( {% }, ~
  • 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] - 多线程测试
    $ h+ {4 m1 f* s% S# L
  • 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] - 多线程测试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] - 多线程测试( }# J/ m: V2 ^. D" m+ X

/ M+ c" U! B" O

+ I3 x/ [$ b3 V* |8 q& g" J' m我知道答案 回答被采纳将会获得5 金钱 已有0人回答
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则