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

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最常用的类。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 摘要: 我们已经知道,synchronized 是Java的关键字,是Java的内置特性,在JVM层面实现了对临界...
    kingZXY2009阅读 1,846评论 0 20
  • ----------------------------------------业精于勤荒于嬉,形成思毁于随---...
    郭之源阅读 2,105评论 0 22
  • 我们已经知道,synchronized 是java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同...
    valor_wang阅读 398评论 0 1
  • 从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那...
    薛晨阅读 710评论 1 5
  • 儿子特别喜欢吃米饭,这几天我打着帮孩子复习的旗号不做晚饭了,都去婆婆家吃。婆婆知道孩子不爱吃馒头就蒸了米...
    李玺辰妈妈阅读 220评论 0 2