首页 > 其他 > 详细

131 Lock接口相关

时间:2020-02-11 20:01:31      阅读:58      评论:0      收藏:0      [点我收藏+]

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

 

131 Lock接口相关

原文:https://www.cnblogs.com/windghost/p/12296434.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!