美文网首页
并发编程ReentrantLock(一)

并发编程ReentrantLock(一)

作者: 进击的三文鱼 | 来源:发表于2021-03-07 20:38 被阅读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持有的那个可重入锁。
    

    相关文章

      网友评论

          本文标题:并发编程ReentrantLock(一)

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