• (锁) 系列篇 -- "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:线程唤醒、休眠辅助类。
     
  • 相关阅读:
    WIN32弹窗报时间【CSDN】
    函数返回类型为引用的好处
    计算机补码的秘密【转】
    设计模式之Singleton模式【类只有一个对象】
    bitwise constness与logical constness【EC++笔记】
    避免使用隐式类型转换【转】
    private, public, protected,继承【转】
    nonlocal static对象初始化【EC++笔记】
    在资源管理类中提供对原始资源的访问【EC++笔记】
    copy构造函数与copy赋值操作符【EC++笔记】
  • 原文地址:https://www.cnblogs.com/xiaoxing/p/12565347.html
Copyright © 2020-2023  润新知