美文网首页
《Java concurrent包源码分析》二、可重入锁

《Java concurrent包源码分析》二、可重入锁

作者: 老呼 | 来源:发表于2017-05-21 12:19 被阅读114次

Lock接口:

public interface Lock {
    void lock();
    void lockInterruptibly() throws InterruptedException;
    boolean tryLock();
    boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
    void unlock();
    Condition newCondition();
}

Lock接口是锁操作的基础,后面的所有的锁实现都会实现Lock接口。

  1. 最无赖的做法:lock(), 拿不到锁就等着,知道拿到位置。
  2. 最潇洒的做法:tryLock():boolean, 拿不到锁就返回false,拿到锁就返回true,并持有锁。
  3. 最聪明的做法:tryLock(long time, TimeUnit unit) :boolean, 拿不到锁就等一会,如果还拿不到就返回false,如果拿到了锁就返回true,并持有锁。
  4. 最无赖而且危险的做法:lockInterruptibly(), 在普通lock()时,如果线程被interrupt,其实现成是不理会的,只是通过isInterrupted可以判断外界是否interrupt了。但是在lockInterruptibly中就不是这样的,如果外界interrupt了,则这个线程就会立刻处理,并抛出异常InterruptedException。这一点跟sleep,wait,join很像。

ReentrantLock

ReentrantLock的定义是这样的: ReentrantLock implements Lock, java.io.Serializable。 它实现了Lock接口,是Lock最常用的类。

相关文章

网友评论

      本文标题:《Java concurrent包源码分析》二、可重入锁

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