回答

收藏

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

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


    6 a3 t( a* Z5 d& v6 t" k* U0 E
  • public boolean acquire(String lockName) {
    7 B% H4 M2 M7 ^5 y$ w+ U4 R' _  I
  •     //声明key对象4 Q  E5 M2 ]2 V% D
  •     String key = LOCK_TITLE + lockName;) u7 G$ N! c& k
  •     //获取锁对象
    ' {% n3 I2 O( {9 f
  •     RLock mylock = redissonClient.getLock(key);
    2 \" i4 f! V% x& s' h" E
  •     //加锁,并且设置锁过期时间3秒,防止死锁的产生 uuid+threadId
    , j. ~# |. ^. J
  •     mylock.lock(3, TimeUnit.SECONDS);1 Y( y/ Z. a& W% n) W' @
  •     //加锁成功; Q( G9 U2 v  x3 E, l* a& B
  •     return true;
    4 K- R% H) j2 \) z% M% x. U% t
  • }. m! Y5 N: C- ?1 G- y" r
  • . M; \: z9 `6 F
  • public void release(String lockName) {& S7 A( H" U( N; n: ~7 r0 @  R5 t
  •     String key = LOCK_TITLE + lockName;
    # r. k( s, |" Y8 v
  •     RLock mylock = redissonClient.getLock(key);4 \" Y; F/ r! W1 Y, {& E
  •     mylock.unlock();
    ! U2 ~- N* ]! y
  • }' X+ t) c( w2 A' y) ^
调用如下; h5 ~, S: q7 [5 o" J* k
    , k, J1 n6 M5 K! b$ X/ s, I' h
  •         boolean acquire = distributedRedisLock.acquire(CacheKey.REGISTER_SMS_RECALL);; _; \! h7 {: u8 K3 H6 T
  •         try {* ^4 D+ L1 v; }. l
  •             if (acquire) {! k& G6 d- a; K, \$ p4 b
  •                 taskExecutor.execute(() -> {
    8 v) C7 r( t0 _9 |- a& h0 w' B
  •                     log.info("多线程测试");
    / k* Q, V( g6 j$ L" c& s: S
  •                 });
    ! x* }: q  J$ m" a+ o: \; O3 D, J' {
  •             }
    6 x6 n$ d1 S& f/ l) m0 o
  •         }catch (Exception e) {
    . Y4 t# L' e% o6 M* `
  •             log.info("{}", ExceptionUtils.getFullStackTrace(e));
    & O" @) @9 I+ _, o% I" R9 w
  •         }finally {2 T% I( U( v+ L2 O) x6 _3 r0 n
  •             distributedRedisLock.release(CacheKey.REGISTER_SMS_RECALL);        }! `% @9 P' }6 [; Y
上锁方法如上,但是使用多线程调用的时候,上锁失败了

    5 z  @( g4 Y3 @% s
  • 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] - 多线程测试; W$ k' L2 J5 g1 q1 `5 f5 v
  • 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] - 多线程测试
    % ?5 B" ?; A8 c; a( ~
( R' B2 x$ j& ^# V3 o3 H5 y! J3 M

- L5 w2 z4 B0 A$ p4 R1 E. [( x- q我知道答案 回答被采纳将会获得5 金钱 已有0人回答
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则