线程工具类

作者: jjjjxd | 来源:发表于2018-04-16 22:47 被阅读0次

CountDownLatch 是能使一组线程等另一组线程都跑完了再继续跑;CyclicBarrier 能够使一组线程在一个时间点上达到同步,可以是一起开始执行全部任务或者一部分任务。

一、CountDownLacth

作用:允许一个或多个线程等待其他线程操作

常用方法:await(),await(TimeUnit unit),countDown()

原理:基于共享锁实现

应用场景:

①实现最大的并行性:有时我们想同时启动多个线程,实现最大程度的并行性。例如,我们想测试一个单例类。如果我们创建一个初始计数为1的CountDownLatch,并让所有线程都在这个锁上等待,那么我们可以很轻松地完成测试。我们只需调用 一次countDown()方法就可以让所有的等待线程同时恢复执行。

②开始执行前等待n个线程完成各自任务:例如应用程序启动类要确保在处理用户请求前,所有N个外部系统已经启动和运行了。

死锁检测:一个非常方便的使用场景是你可以使用n个线程访问共享资源,在每次测试阶段的线程数目是不同的,并尝试产生死锁。

使用例子:http://www.importnew.com/15731.html【转载】

二、同步屏障CyclicBarrier

作用:一组线程等待至某个状态之后再全部同时执行

常用方法:构造函数CyclicBarrier(int parties),CyclicBarrier(int parties,Runnable barrierAction)[所有线程到达屏障后优先执行barrierAction],await()

和countDowncatch比:

对比

原理:

三、控制并发数的Semaphore信号量

常用方法:acquire()

原理:基于AQS实现;

应用场景:流量控制

四、线程交换数据Exchanger

常用方法:exchange()

相关文章

网友评论

    本文标题:线程工具类

    本文链接:https://www.haomeiwen.com/subject/czpkcftx.html