公平锁源码分析
2021-09-24 13:07:18 4 举报
公平锁源码分析
作者其他创作
大纲/内容
释放锁逻辑
\"while true do \" + \
如果线程id存在并且不等于当前线程
注意:map 不存在首先要满足
setKey:redission_lock_timeout:{woshishi}
加入超时队列
集中移除过期的排队线程
获取set中的超时时间
先加超时set
返回ttl
数据类型:HashMap
集中移除过期的排队线程和添加一样
mapKey: woshishi
超时时间锁过期时间
否
计算过期时间(超时时间-默认过期时间30秒-时间戳)
元素不存在
跳出循环
ttl=剩余超时时间
886f2027-91ac-4d00-9735-256f2bf3afab:1
queneKey:redission_lock_queue:{woshishi}
从队列中获取最后一个线程id
将map中的value值加1延长过期时间
value 减1
可重入锁加锁逻辑处理
初始化timeout=ttl+30秒+当前时间
公平锁存储结构
如果map:woshishi 不存在并且(队列中这个元素不存在或 队列中的第一个元素是当前的线程成立)
第一次加锁加锁逻辑
key :886f2027-91ac-4d00-9735-256f2bf3afab:1value:1
已经在排队
删除set中这个元素删除队列中这个元素
加锁逻辑
排队处理
key:886f2027-91ac-4d00-9735-256f2bf3afab:1value:timeout
while(true)
keys:0:woshishi1:redission_lock_queue:{woshishi}2:redission_lock_timeout:{woshishi}parms:0:300001:uuid:12:300003:当前时间戳
\"while true do \" + \
过期时间是否小于当前时间
0 条评论
下一页