美文网首页JUC并发相关
7. 并发终结之Lock接口

7. 并发终结之Lock接口

作者: 涣涣虚心0215 | 来源:发表于2020-09-22 00:56 被阅读0次

Lock是显式锁的接口,默认实现是ReentrantLock。

方法摘要

public interface Lock {
    //获取锁
    void lock();
    //如果当前线程未中断,则获取锁
    void lockInterruptibly() throws InterruptedException;
    //尽在调用锁为空闲时,才会获取锁
    boolean tryLock();
    //如果锁在给定时间内空闲,且当前线程未中断,则获取锁
    boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
    //释放锁
    void unlock();
    //返会绑定在此Lock实例上的Condition实例
    Condition newCondition();
}

Lock.unlock方法要放在finally语句块中,防止临界区异常之后不能正常释放锁而导致锁泄漏,而不像内部锁直接由JIT代为规避锁泄漏的问题。

Lock显式锁调度

ReentrantLock即支持公平锁也支持非公平锁。
公平锁意味着增加了线程的上下文切换,适合持有锁时间相对长或者申请锁时间较长的情形。
非公平锁是默认实现,增加了吞吐量,但是有可能造成饥饿。

显式锁和内部锁

  • 在使用方面
    内部锁基于代码块,简单易用,但是不太灵活,代码块不能跨方法,但是不会造成锁泄漏;另外没有提供监测锁的工具方法。
    显式锁更加灵活,还提供tryLock()方法去尝试获取锁,而不会直接进入阻塞状态,且提供一些监控方法比如isLocked(), getQueueLength()检查等待线程数量等。
  • 在调度方面
    内部锁只支持非公平锁,显式锁支持公平和非公平锁。
    JDK1.6之后对内部锁进行了优化,包括锁消除,锁粗化,偏向锁,轻量级锁,重量级锁。

相关文章

  • 7. 并发终结之Lock接口

    Lock是显式锁的接口,默认实现是ReentrantLock。 方法摘要 Lock.unlock方法要放在fina...

  • 如何理解Condition

    在jdk1.5以后并发包中提供了Lock接口,Condition接口与Lock配合使用可以实现等待/通知模式,在此...

  • 对常用的并发操作 API 和工具类的总结

    1. ReentrantLock Java并发包中通过Lock和Condition两个接口来实现管程,Lock用于...

  • JAVA Lock 接口

    在jdk1.5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,Lock接口提供了与synchro...

  • 04ReentrantLock锁

    概述 介绍java并发包中的Lock锁的基本使用与实现细节。 1 Lock接口 lock锁可以实现和synchro...

  • Lock和Condition:隐藏在并发包中的管程

    Java SDK 并发包通过 Lock 和 Condition 两个接口来实现管程,其 中 Lock 用于解决互斥...

  • Java并发工具类

    Lock和Condition Java SDK并发包通过Lock和Condition两个接口来实现管程,其中Loc...

  • 并发编程之Lock和Condition实现管程

    Java SDK 并发包通过 Lock 和 Condition 两个接口来实现管程,其中 Lock 用于解决互斥问...

  • Java并发 - Lock接口

    Locks包 类层次结构 Lock接口 方法签名描述说明void lock();获取锁(不死不休)一直获取锁,直到...

  • 并发包之锁

    并发包锁结构 Lock Lock是一个接口,定义了锁获取和释放的基本操作。 AbstractQueuedSynch...

网友评论

    本文标题:7. 并发终结之Lock接口

    本文链接:https://www.haomeiwen.com/subject/lwujlktx.html