开发人员的Web无障碍标准
|
我们可以发现前三个小男孩在到达以后都没有进到动物园里,而是直到第四个小男孩来到以后,四个小男孩才进入动物园,在此之前每来一个小朋友就多一个小朋友等待(每个线程调用await方法),直到等待所有人到齐(线程阻塞等待达到栅栏障碍点4),各个小男孩再去继续进入动物园看动物(各线程继续执行自己的任务)。就像是动物园大门的栅栏,买的是团体票,每次必须人到齐才放开让小朋友进去一样。 栅栏总结 各子线程相互等待,直到达到栅栏初始化时的阈值,则继续执行 区分以及个人理解 闭锁:有点类似于一个统计功能(可能这也是为什么他俗称计数器),主线程调用await方法阻塞等待统计结果,而子线程只负责在达到统计要求时调用countDown方法告诉主线程我好了,而不会阻塞本身;有一个负责接收结果(主线程)和一个或多个发送数量的(子线程); 栅栏:首先在线程调用await方法时会阻塞当前线程,其次个人理解他没有类似像闭锁那样的主子的关系,他是各个线程相互等待,都到达某个点的时候,则继续执行。 适用场景 其实从上面的区分就能看出一些:如果是需要将多线程执行完成与否的接口汇总到某一个线程中,然后再继续执行的情况,比如每条线程计算一个指标,都计算完成以后再计算所有指标的总和或者其他的,就可以使用闭锁; 而如果只是各个线程需要等各个线程都完成了,再继续自己的事,可以使用栅栏,比如ABC三个线程分别去获取123三个指标,然后再A要取这三个数的平均数,B要取总和,C要取方差,那就需要等ABC都先取完了123这三个指标,才能计算,这时候就可以用到栅栏了。 总结 这两种都是非常好的线程通讯工具,不过细节还是有所差异。 总得来说就是:
最后
文中的代码只是为了比较好的说明两种工具的差异,写的不好还请小伙伴们多多包涵,如果发现有哪点写的不对的也欢迎大家伙们留言,我们共同进步!最后如果小伙伴觉得文章不错,不妨动动小手点个赞再走,不要下次一定呦~ 机师傅(主线程)要等上了4个乘客以后才发车(等待4个子线程完成完成某件事以后调用countDown方法),而乘客上车(调用countDown)以后该做自己的事还做自己的事情,不会因为上了车就傻呆呆的什么都不干了(不会因为调用了countDown而阻塞自身)。等司机师傅看人够了(到达设定阈值),就发车了。 闭锁总结:
栅栏
栅栏(CyclicBarrier)官方解释: (编辑:广元站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



