b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

countdownlatch await?java多线程工具类?Java 并发之 CountDownLatch、Cycl

电脑杂谈  发布时间:2016-08-09 11:00:52  来源:网络整理

你是否正在寻找关于cyclicbarrier的内容?让我把最完美的东西奉献给你:

cyclicbarrier_countdownlatch await_java多线程工具类

这次说一下 JUC 中的三个同步器小伙伴:CountDownLatch、cyclicbarrier 和 Semaphore,。这仨的共同特点之一是名字都不太好记,所以就从解释它们的名字说起。

CountDownLatch


首先是 CountDownLatch,直译过来就是倒数门闩(还算通顺)。什么意思呢?一句话就是它会在倒数结束之前像门闩一样阻止线程的前进(就是阻塞)。它的用途和 Thread.join() 方法类似,都是用于线程间的协作。只是在 JUC 出现之后,大家都没有方法直接操作线程对象,在这种情况下就必须使用 CountDownLatch 了。

在一些场景,比如你需要用线程池去启用多个线程并发地做一些处理,但是这之后的工作又必须要等这些并发的任务都完成之后再继续。在这时你就可以使用 CountDownLatch 了。

(代码示例我就不写了,写简单了说明不了什么问题,写多了又占地:)

cyclicbarrier


cyclicbarrier 翻译过来叫循环栅栏、循环障碍什么的(还是有点别扭的。所以还是别翻译了,只可意会不可言传啊)。它主要的方法就是一个:await。这个方法的作用是在调用次数到达设定数目之前,阻塞住线程。所以达到的效果就是它可以是多个线程同时开始一项工作。

这个数目和 CountDownLatch 一样,可以在构造函数中设定。与 CountDownLatch 的构造函数有些许不同的是,cyclicbarrier 的构造函数还可以接受一个 Runnable。用于在 Barrier 被释放时触发的动作。

其实 CyclicBarrier 的功能也可以由 CountDownLatch 来实现,只需把 CyclicBarrier.await() 替换成 CountDownLatch.countDown() 加 CountDownLatch.await() 即可。同理,一些使用 CountDownLatch 的场景也可以用 cyclicbarrier 实现。

cyclicbarrier 和 CountDownLatch 程协调上的不同


这两者都是用于线程间的协调的,但不同在于前者主要用于同一组(或者说是用于执行同一项工作)的线程之间的协调。而后者主要用于两组线程之间的协调。

Semaphore


Semaphore 直译是信号量,可能称它是许可量更容易理解。当然,因为在计算机科学中这个名字由来已久,所以不能乱改。它的功能比较好理解,就是通过构造函数设定一个数量的许可,然后通过 acquire 方法获得许可,release 方法释放许可。它还有 tryAcquire 和 acquireUninterruptibly 方法,可以根据自己的需要选择(其实我也对什么时候应该使用这两个方法有太多实践经验,学习无止境啊)

最后一句话总结


CountDownLatch 是等大家都跑完了再继续;cyclicbarrier 是等大家准备好了一起跑;Semaphore 是只允许一定数量的跑

以上就是关于cyclicbarrier的全部内容,相信你一定会非常满意。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-14280-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 郭慧敏
        郭慧敏

        美国佬所做的一切

      • 阎敬爱
        阎敬爱

        由于美帝如此“现代化”的军舰飞机的入侵

      • 刘振东
        刘振东

        见面会

        • 罗绍邦
          罗绍邦

          ipad连热点玩游戏玩的好好的

      热点图片
      拼命载入中...