55:43.929 [INFO] client-1 lock() ... 55:43.942 [INFO] client-3 lock() ... 55:43.947 [INFO] client-2 lock ) fail 55:44.085 [INFO] client-4 lock() fail 55:44.091 [INFO] client-2 lock() fail 55:44.096 [INFO] client 59:32.802 [INFO] client-1 lock() ... 59:32.811 [INFO] client-3 lock() ... 59:32.812 [INFO] client-4 lock element0000000003 被删除,看看是不是轮到自己了 59:40.882 [INFO] client-4 release() result :true 59:40.884 [INFO] client -3 lock() success,拿到锁了,假装忙2秒 59:42.884 [INFO] client-3 release() ... 59:42.887 [INFO] client-3 release
client-1、client-2、client-3 三个客户端正在订阅 “article.tech” 频道 客户端 client-4 正在订阅 “article.mysql” 频道 client-5、
<serviceid> = <path> cloud-eureka-client: /client-3/** client-4: path: /client-4/**
client-3运行截图: ?
<serviceid> = <path> cloud-eureka-client: /client-3/** client-4: path: /client-4/**
) 1 # 如下信息为接收的发布者的消息(类型、模式、频道、消息内容) 1) "pmessage" 2) "biao*" 3) "biao" 4) "123" # 查看活跃的订阅者以及订阅的客户端 client
此时Client-1的任务终于执行完成了,然后去释放了锁(Client-1自己不知道自己超时,还是按照正常逻辑去释放锁),结果Client-3此时又申请到了锁3,然后开始执行自己的任务。 这个时候就会出现了Client-2和Client-3同时执行的异常情况了。 整个问题出现的原因就是释放锁的时候没有校验是否是自己的锁,所以出现了越权释放了别人的锁的情况。