|
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人回答 |
|