并发编程ReentrantLock(一)

2021-03-07  本文已影响0人  进击的三文鱼

一提并发绝对离不开锁,生活中锁有好几种,比如钢丝锁,U形锁,不同的门锁,java中的锁也是一样,他们锁的有型有色,各有千秋。

下面就讲讲一种新锁,他叫做ReentrantLock,还是带着问题去解读

1. 与 synchronized 相比较有什么不同

    官方解答它比synchronized更加灵活、强大、增加了轮询、超时、中断等高级功能以及可以创建公平和非公平锁。意思就是更加牛逼。

    synchronized 是jvm层面的而ReentrantLock是jdk层面的,因为他的试下是通过jdk来实现的

    看下代码

public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}
这个是他的构造方法可以创建公平锁和非公平锁,继续

static final class FairSync extends Sync
他继承了Sync类再继续

abstract static class Sync extends AbstractQueuedSynchronizer
他又继承了

AbstractQueuedSynchronizer
也就是Aqs,这些都是代码中处理了所以他是jdk来实现的,用了代码实现证明他要整事。

  1. ReentrantLock 与 Lock 的关系

ReentrantLock 是基于 Lock 实现的可重入锁,所有的 Lock 都是基于 AQS 实现的

  1. 锁过程中是否可中断,与之对应的 synchronized 可中断吗
ReentrantLock是可重入锁,它里面的lockInterruptibly()方法使得线程可以在被阻塞时响应中断,比如一个线程t1通过lockInterruptibly()方法获取到一个可重入锁,并执行一个长时间的任务,另一个线程通过interrupt()方法就可以立刻打断t1线程的执行,来获取t1持有的那个可重入锁。
上一篇下一篇

猜你喜欢

热点阅读