• (锁) 系列篇 -- "3.1、Lock简述"


     
    Lock接口规范定义锁的基本操作,根据不同实现逻辑实现"公平机制的锁"、"非公平机制的锁"、"可重入的锁"。
    public interface Lock {
        void lock();
    
        void lockInterruptibly() throws InterruptedException;
       
        boolean tryLock();
       
        boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
    
        void unlock();
        
        // 精细控制锁力度,类似Object的notify、notifyAll、wait等锁操作
        Condition newCondition();
    }
     
    Lock家族图谱如下,基本串联所有j.u.c.locks包下类之间关系。 Lock接口定义规范 和 AbstractQueuedSynchronizer(AQS)提供实现基础,成为了核心汇集点。
     
     核心类:
    • AbstractOwnableSynchronizer : 记录当前保持独占同步的线程的简单类。
    • public abstract class AbstractOwnableSynchronizer implements java.io.Serializable {
      
          /** Use serial ID even though all fields transient. */
          private static final long serialVersionUID = 3737899427754241961L;
      
          /**
           * Empty constructor for use by subclasses.
           */
          protected AbstractOwnableSynchronizer() { }
      
          /**
           * 持有锁的线程
           */
          private transient Thread exclusiveOwnerThread;
      
          /**
           * 设置锁持有者
           */
          protected final void setExclusiveOwnerThread(Thread thread) {
              exclusiveOwnerThread = thread;
          }
      
          /**
           * 获取锁持有者
           */
          protected final Thread getExclusiveOwnerThread() {
              return exclusiveOwnerThread;
          }
      }
    • AbstractQueuedLongSynchronizer / AbstractQueuedSynchronizer :AQS核心逻辑利用虚拟双向队列 CLH (Craig, Landin, and Hagersten)实现获锁、释放锁、排队系列操作,是并发包最核心逻辑。
    • ReentrantLock / ReentrantReadWriteLock :独占锁 和 读写锁,实现更高效锁机制。
    • Condition:细粒度控制锁,每个Condition条件将会建立一个虚拟队列 与 CLH关联,进而达到控制锁。
    • LockSupport:线程唤醒、休眠辅助类。
     
  • 相关阅读:
    <Yarn> <Capacity Scheduler> <Source Code>
    [Paper] LCS: An Efficient Data Eviction Strategy for Spark
    [Paper] Selection and replacement algorithm for memory performance improvement in Spark
    Zookeeper与Paxos
    Paxos工程实践
    Join Algorithm
    《c# 从入门经典》 (第6版)
    Unity Standard Assets 简介之 2D
    Unity Standard Assets 简介之 Utility
    《Invert》开发日志03:一些想法
  • 原文地址:https://www.cnblogs.com/xiaoxing/p/12565347.html
Copyright © 2020-2023  润新知