第8章-Java的并发工具类

前言

CountDownLatch
CyclicBarrier
Semaphore🖊

CountDownLatch

CountDownLatch 允许一个或多个线程等待其他线程完成操作

原始的方法可以使用 join(),让线程在此等待其他线程执行结束。(join内部实现是不断检查join的线程是否存活,最后用notifyAll通知阻塞在外面的线程)

Java1.5 之后提供了CountDownLatch,也能实现Join的功能,而且功能更多。

操作

  1. new CountDownLatch(int N):构造
  2. countDown():计数器-1
  3. await():阻塞,等待计数器到0
1
2
3
4
5
static CountDownLatch c = new CountDownLatch(2);	// 构造时指定计数器大小

c.countDown(); // 计数器-1,这个countDown可放在任何地方,包括不同线程,或同一线程里的不同步骤

c.await(); // 阻塞当前线程,直到计数器 N 变为0,这个方法有超时版本

CyclicBarrier 同步屏障

可重复使用的屏障,让一组线程到达一个屏障(同步点)后阻塞,直到最后一个线程到达屏障时,所有屏障都才会开门,线程继续运行。

操作

  1. new CyclicBarrier(int N):构造方法1,指定计数器大小
  2. new CyclicBarrier(int N, Runnable Action):指定当所有线程都到达屏障时,屏障打开前执行的动作
  3. await():到达屏障,计数器-1,线程阻塞于此
  4. reset():重置屏障计数器为原样
  5. getNumberWaiting() :获得正在阻塞的线程数

使用场景

多线程计算数据,最后合并计算出结果。

Semaphore 信号量

用来控制访问特定公共资源的线程数量。通过协调各个线程保证合理的使用公共资源。

操作

  1. new Semaphore(int N):构造,指定资源使用的许可数量

  2. acquire()

  3. release()

本文标题:第8章-Java的并发工具类

文章作者:Aaron.H

发布时间:2018年06月08日 - 19:06

最后更新:2018年09月10日 - 17:09

原始链接:https://uncleaaron.github.io/Blog/Java/Java并发编程艺术/第8章-Java的并发工具类/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。