美文网首页android
JUC之CountDownLatch

JUC之CountDownLatch

作者: keeperforone | 来源:发表于2019-02-17 14:01 被阅读150次

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时调用线程直接下一步,不等于就进入阻塞队列里面。

相关文章

网友评论

    本文标题:JUC之CountDownLatch

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