当前位置: 首页 > 后端技术 > Java

面试官:CountDownLatch和CyclicBarrier的使用场景是什么?有什么不同?

时间:2023-04-01 21:23:52 Java

相信每一个想深入了解多线程开发的Java开发者都会遇到CountDownLatch和CyclicBarrier。网上也能看到各种介绍原理、代码,以及它们的区别(应付面试),但很少有人能说清楚:它们的作用是什么,怎么用,用在什么场景?为什么总有面试?本文结合场景加深大家的理解。官方解释:翻译:CountDownLatch是一个同步辅助类,允许一个或多个线程等待一组其他线程完成操作后再继续。CyclicBarrier是一个同步辅助类,它允许一组线程在继续之前相互等待到达共同点。都是:同步辅助,我翻译成同步辅助,既然是辅助工具,怎么用呢?使用了哪些场景?个人理解:CountDownLatch:我理解为倒计时锁。场景还原:一年级期末考试即将开始。监考老师发完试卷,然后坐在讲台旁边一边玩手机,一边等待同学们答题。一些学生提前交了试卷。和我们约好了打球,等到最后一位同学交卷后,老师就开始整理试卷,盖章,下班,去陪老婆孩子了。补充场景:我们在玩LOL英雄联盟的时候,会有十个不同加载状态的玩家,但是最后一个因为各种原因不能100%加载,所以游戏系统会自动等待所有玩家的状态为在显示游戏画面之前准备好。摘要图:每一个乘客(线程)上车后,availableseat减1,直到为0,老司机开始下车。个人理解:CyclicBarrier:可以看成是一个障碍。所有线程必须在一起才能通过这个障碍场景。还原度:以前公司组织户外拓展活动帮助团队建设,最重要的项目是全体员工(包括女同事,BOSS)在完成其他项目时,达到四米高的墙,没有任何抓点,并要求大家翻过高墙才能继续其他项目。摘要图片:解放军完美配合,一个也不能少,继续完成任务。我在这里只是为了帮助大家更好的了解他们的应用场景,具体的用法大家可以自行搜索。