countdownlatch 底层原理,定义锁资源:0,当资源为0才叫拿到锁,所以countdownlatch也叫做倒数器,拿锁的时候判断是不是0,不是就park,然后countdown的时候,会- state的时,当state的值为1的时候,park的现场就会醒过来
在我的理解下,CountDownLatch可以理解为就是一个同步器,让谁先做,谁后做(或者说让哪些人先做,那些人后做)
两种情况:(谁等谁 await)
底层原理:多个线程来了之后,就会await,实际上也是调用lock.condition.await,同时-1 。当10减成0之后,开桌,本质上就是调用condition.signalAll。
cyclicBarrier与countdownlatch区别:countdownlatch一次性的,cyclicBarrier是可以重置的,countdownlatch是基于aqs共享模式的使用,cyclicBarrier时基于condition实现的
CyclicBarrier相当于上面的第2种情况,主线程等多个子线程完成之后,再干什么事
创建5个子线程(运动员)准备,准备完成 await,等所有线程await数量达到栏栅要求的**指定线程数量,阑珊就会放开,相当于去掉了主线程还要打开开关的过程,只要所有线程await数量满足,自动放行。**当所有线程执行完之后,会执行CyclicBarrier第二个Runnable参数
这个类似于一个限流器,相当于高速公路上的闸口,当有很多车辆想要通过,但是闸口却只有那么多,那只能限流。
留给你去看