美文网首页
编程 || CountDownLatch、CyclicBarri

编程 || CountDownLatch、CyclicBarri

作者: 快语 | 来源:发表于2022-11-01 20:29 被阅读0次

线程池是技术层面的,我同一时间就只有这么多干活的人。而CountDownLatch是事情层面的,我有这么多事儿要干。
所以它的作用就是,在你的多线程任务执行完后,CountDown一下。那么CDL自带的计数器就会减一。
在调用线程中,任务分下去了,要等任务再回来了,就使用一下CDL的await()方法,那么主线程就进入阻塞状态。一直到所有子任务都完成再继续执行。非常容易理解。
还有一点要注意的是。如果钻研不动源码,就先别钻。当代人真的都不缺钉子精神,缺少刨子精神。

另一个常用类是CyclicBarrier。同样是一群人要干活,但现在场景变化,是要当所有人就位后,这些人才会一起干活。
所以在被调用线程里,要排队等号令的线程可以调用一下CB的await(),随后等人(线程)齐了,就一起执行。

第三个常用类是Semaphore,信号量。其实就像一个通行证的池子。当你要用这个线程干一件事儿,那么先去S中拿一个通行证,有证就继续走,没证就阻塞着。干完事儿后,在把通行证还给S,下一个人就有证拿了。
拿证的方法是acquire,还证的方法是release。

这三个方法都常常用在线程的编排之中,实际上但凡多线程场景,必然会有这种编排。所以就是先业务上编排好,先洗菜还是先切菜,还是先啥啥的,这些情况下,可以考虑多使用这些的工具类。

除了以上这些方法外,还有一个更简单的方式,thead.join(),这个方法让当前线程等待thread执行完后继续执行。这和cdl是一样的效果。

相关文章

网友评论

      本文标题:编程 || CountDownLatch、CyclicBarri

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