Java.utils.concurrent包中的几个有用的类(CountDownLatch、CyclicBarrier、Semaphore)

来源:互联网 发布:淘宝刷单处罚新规则 编辑:程序博客网 时间:2024/06/04 23:31

CountDownLatch

它是一个计数器,类中有两个重要的方法:countDown(),await() .
new的时候需要用一个整数参数 。设置线程计数的数量 。
然后在每个线程中会调用countDown方法(就是计数器减一)。

之后我们可以调用await方法等待所有的线程都结束后才去执行后面的任务。

CyclicBarrier

设置线程阻塞。
其构造函数可以接受一个数或者一个数和一个Runnable实例。
即可以设置屏障的数量和屏障数量达到后需要执行的线程。

在每个线程里面会调用await方法,让当前线程在这个地方阻塞起来,知道屏障数达到设定值的时候所以的线程才开始运行(即执行上面构造函数传入的Runnable实例的run方法)。

Semapphore

用来控制流量的。
其构造函数接受一个数字。类中两个有用的方法acquire,release 。

在线程执行前首先会申请一个许可证也就是调用acquire方法,线程结束的时候就会归还许可证也就是调用release 。
当外界对一个应用没有一个流量概念的时候,很有可能超过其能承受的负载,所以我们可以在其中加入Semappore控制,技术外面创建了更多的线程,其实也只能有限制的那么多线程能同时执行。
0 0