Skip to content

Latest commit

 

History

History
42 lines (28 loc) · 3.13 KB

AbstractQueuedSynchronizer.adoc

File metadata and controls

42 lines (28 loc) · 3.13 KB

AbstractQueuedSynchronizer

在 Java 5 之后,JDK 内置了大量的并发工具类。粗略去看这些工具类的源码,你会发现,大多数都在内部继承了 AbstractQueuedSynchronizer。由此可见,AbstractQueuedSynchronizer 的核心地位。想搞清楚这些并发工具类的原理,AbstractQueuedSynchronizer 的源码可以说是不可不看。

Node 详解

Node 中一些常量定义

区分共享锁还是独占式锁的常量,是如何被使用的?独占锁为何没有初始化?

  1. static final Node SHARED = new Node();

  2. static final Node EXCLUSIVE = null; — 为何没有被初始化?

节点的状态

  1. static final int CANCELLED = 1; — 表示当前的线程被取消;

  2. static final int SIGNAL = -1; — 表示当前节点的后继节点包含的线程需要运行,也就是unpark;

  3. static final int CONDITION = -2; — 表示当前节点在等待condition,也就是在condition队列中;

  4. static final int PROPAGATE = -3; — 表示当前场景下后续的acquireShared能够得以执行;

  5. 0 — 表示当前节点在sync队列中,等待着获取锁。

参考资料

Warning
访问一些页面时发现一些页面已经不能访问了,后续再搜索补上吧。
  1. 【JUC】JDK1.8源码分析之AbstractQueuedSynchronizer(二) - leesf - 博客园

  2. 深度解析Java 8:JDK1.8 AbstractQueuedSynchronizer的实现分析(上)

  3. 深度解析Java 8:AbstractQueuedSynchronizer的实现分析(下)

  4. Lock、ReentrantLock和AbstractQueuedSynchronizer的源码要点分析整理 | 三石·道

  5. Java并发包源码学习之AQS框架(一)概述 - Jindong Zhan

  6. Java并发包源码学习之AQS框架(二)CLH lock queue和自旋锁 - Jindong Zhan

  7. Java并发包源码学习之AQS框架(三)LockSupport和interrupt - Jindong Zhan

  8. Java并发包源码学习之AQS框架(四)AbstractQueuedSynchronizer源码分析 - Jindong Zhan

  9. AbstractQueuedSynchronizer的介绍和原理分析 | 并发编程网 - ifeve.com

  10. JUC 源码分析 一 AbstractQueuedSynchronizer | 码蜂笔记

  11. Java 多线程基本工具的原理AQS

  12. JUC 源码分析 3 AbstractQueuedSynchronizer 共享模式 与 CountDownLatch - 互联网 - 爱上编程技术博客

  13. 通过CountDownLatch来分析AbstractQueuedSynchronizer的源码 - - ITeye技术网站