131 Lock接口相关

Lock接口 

       lock()   没完没了的试 挂起

       trylock()  一次不成就算了

       trylock(time,timeunit)   超时后就算了

       lockinterruptibly() 被动等通知 可中断

       newCondition 等待池。如果唤醒和挂起倒置 会死锁

 

reentrantL

 

       lock() 没完没了的试 挂起

 

       trylock() 一次不成就算了

 

       trylock(time,timeunit) 超时后就算了

 

       lockinterruptibly() 被动等通知 可中断

 

       newCondition 等待池。如果唤醒和挂起倒置 会死锁

 

 

 

reentrantLock:加锁和解锁的次数要求一致,解锁次数少锁不释放,多则报错。 存在count值记录加锁次数。

      加锁流程:线程先判断count是否为0,为0则认为没有占用,获取owner。如果count不为0,判断owner是不是自己。是则count+1否则进入等待队列。cas操作的是count

      解锁流程:优先判断owner是否是自己,是则count-1(为0则解锁完成,owner处理为null,唤醒等待队列头线程;不为0,结束);如果不是自己,报错。

      基本结构接近synchronized heavy weight lock

 

读写锁(ReenTrantReadWriteLock): 内部分开读锁写锁,两锁互斥。并行读,串行写。

      基本流程:owner,readcount,writecount;

      加写锁前,判断readcount,如果为0,则判断writecount,为零则cas,不为0判断owner是否为自己,是则重入,不是则进入等待

     加读锁前,判断writecount,如果为0,cas readcount。否则进入等待队列。多个读锁cas自旋更新readcount,不许要更新owner

 

posted on   李某人的窥视  阅读(88)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示