CyclicBarrier介绍
来源:互联网 发布:照片合成软件下载 编辑:程序博客网 时间:2024/06/06 16:46
CyclicBarrier 的字面意思是可循环(Cyclic)使用的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。线程进入屏障通过CyclicBarrier的await()方法。
CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。
CyclicBarrier还提供一个更高级的构造函数CyclicBarrier(int parties, Runnable barrierAction),用于在线程到达屏障时,优先执行barrierAction这个Runnable对象,方便处理更复杂的业务场景。
实现原理:在CyclicBarrier的内部定义了一个Lock对象,每当一个线程调用CyclicBarrier的await方法时,将剩余拦截的线程数减1,然后判断剩余拦截数是否为0,如果不是,进入Lock对象的条件队列等待。如果是,执行barrierAction对象的Runnable方法,然后将锁的条件队列中的所有线程放入锁等待队列中,这些线程会依次的获取锁、释放锁,接着先从await方法返回,再从CyclicBarrier的await方法中返回。
CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。
CyclicBarrier还提供一个更高级的构造函数CyclicBarrier(int parties, Runnable barrierAction),用于在线程到达屏障时,优先执行barrierAction这个Runnable对象,方便处理更复杂的业务场景。
实现原理:在CyclicBarrier的内部定义了一个Lock对象,每当一个线程调用CyclicBarrier的await方法时,将剩余拦截的线程数减1,然后判断剩余拦截数是否为0,如果不是,进入Lock对象的条件队列等待。如果是,执行barrierAction对象的Runnable方法,然后将锁的条件队列中的所有线程放入锁等待队列中,这些线程会依次的获取锁、释放锁,接着先从await方法返回,再从CyclicBarrier的await方法中返回。
阅读全文
0 0
- CyclicBarrier介绍
- CyclicBarrier介绍
- CyclicBarrier介绍
- CyclicBarrier介绍
- CyclicBarrier介绍
- CyclicBarrier介绍
- CyclicBarrier介绍
- CyclicBarrier介绍
- CyclicBarrier介绍
- CyclicBarrier介绍
- CyclicBarrier介绍
- CyclicBarrier介绍
- CyclicBarrier介绍
- CyclicBarrier介绍
- Java 栅栏 CyclicBarrier 介绍
- CyclicBarrier介绍及使用说明
- CountDownLatch和CyclicBarrier介绍
- CyclicBarrier和CountDownLatch介绍
- js 合并数组
- 软件工程之软件项目管理
- c语言_单链表
- 【视觉-三维视觉技术-术语篇】三深度图像,点云数据
- andorid TextView(1)-带图片的TextView
- CyclicBarrier介绍
- 设置—用户—机主点击拍照设置头像,拍照之后,头像设置不上去
- 递归转化为循环
- 1037. 在霍格沃茨找零钱(20)
- 2017-6-6
- vs2013 license
- Gmail The SMTP server 5.5.1 Authentication Required
- 欢迎使用Markdown编辑器写博客
- MySQL事务隔离级别