什么是 AQS
同步工具类 也叫同步器(Synchronizer)。在使用同步器时,我们发现不同的同步器存在许多共同点,例如 ReentrantLock 和 Semaphore 都支持每次允许一定数量线程通过/等待/取消,也都支持让等待线程执行公平或非公平的队列操作等。
事实上,很多同步工具类在实现时都使用了共同的基类,这就是 AbstractQueuedSynchronizer(AQS),抽象队列同步器
。
同步工具类 也叫同步器(Synchronizer)。在使用同步器时,我们发现不同的同步器存在许多共同点,例如 ReentrantLock 和 Semaphore 都支持每次允许一定数量线程通过/等待/取消,也都支持让等待线程执行公平或非公平的队列操作等。
事实上,很多同步工具类在实现时都使用了共同的基类,这就是 AbstractQueuedSynchronizer(AQS),抽象队列同步器
。
要实现多个线程之间的数据共享,需要考虑两个问题:
接收线程
和 发送线程
之间必须要有个先后关系。此时就需要用到同步,即控制多条线程之间的执行次序。有时候,我们想在主线程之外执行一些异步任务,不难想到,可以开一个新线程专门去处理某个任务。
《On Java 8》一书中,作者 Bruce Eckel 提出了并发编程的 5 个步骤:
看了以上的描述,是不是觉得,即使是 Java 并发编程的大佬,也一再劝我们避免编写并发代码。
并发编程显然有很多优势,然而,多线程也带来了一定的风险。例如安全性问题、活跃性问题、性能问题等。
并发编程的问题,在Java简明笔记(十一) 并发编程中就有提及,这一篇,主要就安全性问题,详细谈谈Java并发编程的问题。