Java锁(五)CyclicBarrier分析

CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。CyclicBarrier 默认的构造方法是 CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用 await 方法告诉 CyclicBarrier 我已经到达了屏障,然后当前线程被阻塞。 1、CyclicBarrier 使用实例public class CyclicBarrierTest { stat ...

Java锁(四)ConditionObject分析

在讲 ConditionObject 之前,先讲解下条件队列。条件队列能够使得一组线程能够通过某种方式来等待特定的条件变成真,条件队列中的成员是一个个正在等待状态的线程。条件队列提供了一种挂起方式,当现场等待的条件非真时,挂起自己并释放锁,一旦等待条件为真,则立即醒来。 条件队列主要功能1、隐式锁对应的条件队列对象的内置锁(synchronized 语义对应的同步机制),关联着一个内置的条件队列。Object 的 wait/notify/notifyAll 等方法构成了内部条件队列的 API(即将内部锁与内部条件队列关联的机制)。 内部条件队列是需要内置锁保护的,需要调用对 ...

Java锁(三)CountDownLatch共享锁分析

在开始解读 AQS 的共享功能前,我们再重温一下 CountDownLatch,CountDownLatch 为 java.util.concurrent 包下的计数器工具类,常被用在多线程环境下,它在初始时需要指定一个计数器的大小,然后可被多个线程并发的实现减 1 操作,并在计数器为 0 后调用 await 方法的线程被唤醒,从而实现多线程间的协作。 1、闭锁使用class Driver2 { void main() throws InterruptedException { CountDownLatch doneSignal = n ...

Java锁(二)ReentrantLock独占锁分析

ReentrantLock 的功能是实现代码段的并发访问控制,是一种排它锁,也就是通常意义上所说的锁,内部有两种实现 NonfairSync 和 FairSync,公平锁和非公平锁,默认采用非公平锁策略。ReentrantLock 的实现不仅可以替代隐式的 synchronized 关键字,而且能够提供超过关键字本身的多种功能。 1、ReentrantLock 的使用class X { private final ReentrantLock lock = new ReentrantLock(); // ... public void m() ...

Java锁(一)AQS分析

作为一个 java 开发者,并发编程是不可或缺的,在并发的过程,Lock 是并发的关键。 本系列文章主要来讲解锁的原理和机制。在理解 J.U.C 原理以及锁机制之前,我们来介绍 J.U.C 框架最核心也是最复杂的一个基础类:java.util.concurrent.locks.AbstractQueuedSynchronizer。上面的继承体系中,AbstractQueuedSynchronizer 是 CountDownLatch/Semaphore/RenntrantReadWriteLock /Worker/ReentrantLock 的基础, ...

Java并发编程之锁

作为一个 java 开发者,并发编程是不可或缺的,在并发的过程,Lock 是并发的关键,本文主要从排它锁和共享锁的实例来讲解锁的机制。 本文主要从以下方面来讲解锁的原理及使用: AbstractQueuedSynchronizer 分析 ReentrantLock 独占锁分析 CountDownLatch 共享锁分析 ConditionObject 分析 CyclicBarrier 分析