锁-lock

作者: miky_zheng | 来源:发表于2019-01-27 21:52 被阅读0次

    lock(显示监视器)由来:(同步锁不足的场景举例)

    注:以下部分总结,由lock jdk1.8注释翻译过来。

    1.同步锁(隐式监视器锁)的特点,有作用域,代码块的约束。
    2.同步锁持有锁及释放顺序是固定的,如果持有多个锁,必须先按按相反的方向释放锁。并且在指定的代码块中。

    hand-over-hand,chain locking,
    acquire the lock of node A, 
    then node B, then release A and acquire C, 
    then release B and acquire D and so on。
    

    hand-over-hand,chain locking这些算法的特点:持有释放锁,没有顺序。
    如:持有a--持有b--释放a--持有c--释放b--持有d.
    如果是同步锁就做不到,只能是持有a--释放a,持有b--释放b.

    3.不阻塞的持有锁

    an attempt to acquire the lock that can be
     * interrupted ({@link #lockInterruptibly}, and an attempt to acquire
     * the lock that can timeout ({@link #tryLock(long, TimeUnit)})
    

    4.例如保证排序、不可重入使用或死锁检测。如果一个实现提供了这种专门的语义,那么该实现必须记录这些语义

    5.ReadWriteLock的读锁允许并发的访问共享资源

    6.lock锁可以用在synchronized代码块中,(但建议不要用,以免混淆)

    7.不成功的锁定和解锁操作以及可重入的锁定/解锁操作不需要任何内存同步效果。
    Memory Synchronization[内存同步]{https://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4 }

    Lock注意事项:(Implementation Considerations)

    获取锁的三种方式:interruptible,non-interruptible, and timed
    其中interruptible获取锁的方式,可能导致锁不可用。
    因此,不用实现获取锁的三种方式,也不需要支持正在进行锁获取。需要一个实现来清晰地记录每个锁定方法提供的语义和保证。它还必须遵守中断语义在该接口中定义,在锁定中断的情况下支持获取:完全支持或仅支持方法进入。

    实现:ReentrantLock,Condition,ReadWriteLock

    相关文章

      网友评论

          本文标题:锁-lock

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