JUC并发相关

7. 并发终结之Lock接口

2020-09-22  本文已影响0人  涣涣虚心0215

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

显式锁和内部锁

上一篇 下一篇

猜你喜欢

热点阅读