锁专题(五)ReentrantLock 深入源码详解( 三 )
个人的理解是这里的尝试获取锁就只有一次 , 虽然破坏了公平性呢 , 但是性能很好 , 常常是更符合使用者预期的 。
ps: 这里不得不感慨一下 , 有些东西不看源码 , 是想不到的 。
- 我们想使用公平模式获取锁怎么办?
文章插图
公平
那问题又来了 , 我们想使用公平锁模式获取锁怎么办?
我们可以使用 tryLock(0, TimeUnit.SECONDS) 这个方法公平的获取锁 。
tryLock(long timeout, TimeUnit unit)指定超时时间的获取锁方法 , 系统会统一转换为 nanos 去处理 。
public boolean tryLock(long timeout, TimeUnit unit)throws InterruptedException {return sync.tryAcquireNanos(1, unit.toNanos(timeout));}
- 纳秒是多久?
光在真空中一纳秒仅传播0.3米 。 个人电脑的微处理器执行一道指令(如将两数相加)约需2至4纳秒 。
- tryAcquireNanos
/** * @author 老马啸西风 */public final boolean tryAcquireNanos(int arg, long nanosTimeout)throws InterruptedException {if (Thread.interrupted())throw new InterruptedException();return tryAcquire(arg) ||doAcquireNanos(arg, nanosTimeout);}
可以看出这个方法同样支持中断 。/** * Acquires in exclusive timed mode. * * @param arg the acquire argument * @param nanosTimeout max wait time * @return {@code true} if acquired * @author 老马啸西风 */private boolean doAcquireNanos(int arg, long nanosTimeout)throws InterruptedException {if (nanosTimeout <= 0L)return false;final long deadline = System.nanoTime() + nanosTimeout;final Node node = addWaiter(Node.EXCLUSIVE);boolean failed = true;try {for (;;) {final Node p = node.predecessor();if (p == headp.next = null; // help GCfailed = false;return true;}nanosTimeout = deadline - System.nanoTime();if (nanosTimeout <= 0L)return false;if (shouldParkAfterFailedAcquire(p, node)if (Thread.interrupted())throw new InterruptedException();}} finally {if (failed)cancelAcquire(node);}}
方法执行的时候设置了一个 deadline , 有一句话怎么说来着 。deadline 是第一生产力 , 可能对于锁而言也是如此吧 。
unlock()释放锁 。
public void unlock() {sync.release(1);}
- release()
/** * @author 老马啸西风 */public final boolean release(int arg) {if (tryRelease(arg)) {Node h = head;if (h != nullreturn true;}return false;}
其他还有一些方法 , 我们平时也不常用 , 此处就不做重点解析 。小结锁作为我们高性能并发中并发安全的基础 , 是每一位 java 程序员的必备技能 。
源码相对各种博客中的使用 , 显得有些无趣 , 但是有些东西 , 是源码中才有的知识 。
相信你对技术有着更深的追求 , 极客的学习就会追根究底且枯燥 。
本节中多次出现了一个类叫 AQS , 下一节让我们一起来揭开这个类的神秘面纱 。
【锁专题(五)ReentrantLock 深入源码详解】各位极客的点赞转发关注 , 是我创作的最大动力 , 感谢你的支持!
文章插图
- 报名啦!宿迁开展第五届“十大科技之星”评选
- 苹果|iPhone13迎来变化!或回归指纹解锁,这几点备受用户喜爱
- 星期一|亚马逊:黑五与网络星期一期间 第三方卖家销售额达到48亿美元
- 绝不能|互联网也有“五连鞭”毒瘤,绝不能让这些“割韭菜者”一跑了之
- 早报:高通骁龙888正式发布 嫦娥五号传回首张图片
- 网购|黑色星期五及网购星期一大数据出炉 全球第三方卖家销售额超48亿美元
- 摄像头|华为Mate40或采用五摄加一传感器,摄像头越多真越好
- 手机|预算只有五千,买4G的iPhone11还是买国产5G安卓机?
- 至上|男人的工具箱:五金工具跟着我来买,实用至上,绝不吃灰
- 公园|长沙五一广场、烈士公园…湖南5G速度最快的地方是?