美文网首页
ReentrantLock

ReentrantLock

作者: 6默默Welsh | 来源:发表于2019-07-17 07:31 被阅读0次

    获取公平锁
    参考1
    参考2
    参考3
    参考4
    参考5
    )

    公平锁和非公平锁区别
    自定义锁中的同步队列与等待队列
    JAVA 线程状态 阻塞和等待 bloked 和 waiting 区别
    阻塞与等待的区别
    阻塞:当一个线程试图获取对象锁(非java.util.concurrent库中的锁,即synchronized),而该锁被其他线程持有,则该线程进入阻塞状态。它的特点是使用简单,由JVM调度器来决定唤醒自己,而不需要由另一个线程来显式唤醒自己,不响应中断。
    等待:当一个线程等待另一个线程通知调度器一个条件时,该线程进入等待状态。它的特点是需要等待另一个线程显式地唤醒自己,实现灵活,语义更丰富,可响应中断。例如调用:Object.wait()、Thread.join()以及等待Lock或Condition。

    需要强调的是虽然synchronized和JUC里的Lock都实现锁的功能,但线程进入的状态是不一样的。synchronized会让线程进入阻塞态,而JUC里的Lock是用LockSupport.park()/unpark()来实现阻塞/唤醒的,会让线程进入等待态。但话又说回来,虽然等锁时进入的状态不一样,但被唤醒后又都进入runnable态,从行为效果来看又是一样的。

    如果出现异常或者出现中断,就会执行finally的取消线程的请求操作cancelAcquire()

    interrupted() 作用是测试当前线程是否被中断(检查中断标志),返回一个boolean并清除中断状态,

    Condition参考1
    Condition参考2

    相关文章

      网友评论

          本文标题:ReentrantLock

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