android

JUC之CountDownLatch

2019-02-17  本文已影响150人  keeperforone

CountDownLatch是一个同步计数器,它可以保证一些线程全部执行完毕后当前再往下一步执行。

  新建10条线程,每条运行把当前线程的名称添加到list中,最后打印长度。理想情况下list的长度是10,但是由于线程执行时间的不一致,每次运行list的长度都是可变的。CountDownLatch可以为我们很好的解决这个问题。

1:创建计数器为10的CountDownLatch对象:

2:子线程都执行countDown方法

3:当前线程调用await方法进入阻塞状态

每调用countDown方法就相当与计数-1,当计数器的count数值等于0时,调用await阻塞的线程才会释放,如果计数器的count数值不等于0,那阻塞线程将不会被释放

源码解析

内部自定义集成AQS的同步器Sync,构造CountDownLatch对象传入state作为AQS同步器的计数

每次调用countDown方法会通过CAS算法将计数器count数值-1

state==0时调用线程直接下一步,不等于就进入阻塞队列里面。

上一篇 下一篇

猜你喜欢

热点阅读