并发线程辅助类

1、CountDownLatch  减法计数器

CountDownLatch 作为计数器使用,顾名思义,是做 - - 的计数器。

在必须要执行某些任务的时候使用此辅助。

如下图可见,未等待计数器归零,则有可能出现有的学生还没出去就已经关门了。

 解决办法就是添加一个await()等待该计数器归零。在执行其他操作。

 原理:

count.countDown();//计数器-1操作
count.await();//等待计数器归零,在执行下面操作
每次有线程调用countDown()数量-1,假设计数器变为0,count.await()就会被唤醒,继续执行。

2、CyclicBarrier  加法计数器

原理:

new CyclicBarrier(int temp,Runnable)  当计数器达到temp之后执行Runnable内容

barrier.await();每个线程执行完之后计数器+1,直到加到temp之后,运行Runnable内容
当所以执行的线程数量<temp时,则程序一直处于等待状态。

3、SemaPhore  信号量

约定一个线程数量,超出的线程部分等待,运行的线程结束之后,等待的线程在进入执行操作。

semaphore.acquire();//获取得到   加入线程约定的数量已经满了,那么其他线程在外面等待,等待里面的线程被释放。   相当于-1操作  得到之后,按上面例子来说,就是剩余的停车位-1
semaphore.release();//释放   会将当前信号量释放。然后唤醒等待的线程。                    相当于+1操作  释放之后,按上面例子来说,就是剩余的停车位+1

作用:多个共享资源互斥的使用。
  并发限流,控制最大的线程数。
原文地址:https://www.cnblogs.com/jzspace/p/12951182.html