(锁) 系列篇 -- "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:线程唤醒、休眠辅助类。

 

 

posted on 2020-03-25 12:36  小猩  阅读(233)  评论(0编辑  收藏  举报

导航