Java锁(五)CyclicBarrier分析

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

Java锁(四)ConditionObject分析

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

Java锁(三)CountDownLatch共享锁分析

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

Java锁(二)ReentrantLock独占锁分析

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

Java并发编程之锁

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

Java锁(一)AbstractQueuedSynchronizer分析

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