码上敲享录 > java高并发常见问题 > java高并发包之CountDownLatch、CyclicBarrier、Phaser的区别

java高并发包之CountDownLatch、CyclicBarrier、Phaser的区别

上一章章节目录下一章 2019-05-13已有1598人阅读 评论(0)

java高并发包之CountDownLatch、CyclicBarrier、Phaser的区别


解决方法:

类CountDownLatch的计数是减法操作,调用await()方法时判断计数是否为0,如果不为0则呈等待状态。其他线程可以调用count-Down()方法将计数减1,当计数减到为0时,呈等待的线程继续运行,而方计数无法被重置。


CyclicBarrier的计数是加法操作,不仅有CountDownLatch所具有的功能,还可以实现屏障等待的功能,可以循环地实现线程要一起做任务的目标,其作用是设置线程的个数n,此时这些线程彼此互相等待,一直呈阻塞状态,也就是n个线程都执行了CyclicBarrier对象的await()方法后程序才可以继续向下运行,这就实现了一轮做任务的目标,当再有线程调用CyclicBarrier对象的await()方法时一直呈阻塞状态,再次等到n个线程都执行了CyclicBarrier对象的await()方法后程序又才可以继续向下运行,周而复始,这就是实现屏障等待的功能


Phaser类来解决CyclicBarrier类一些自身上的缺陷,比如不可以动态添加parties计数,调用一次await()方法仅仅占用1个parties计数


0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交