Java多线程之CyclicBarrier(一)
来源:互联网 发布:西安朝阳软件 编辑:程序博客网 时间:2024/05/17 04:15
CyclicBarrier,见名思义,循环的障碍。这怎么理解呢?在Java中,这样定义一个障碍:CyclicBarrier cb = new CyclicBarrier(3);,其中参数 3 代表障碍阻挡的
线程数,也就是说,障碍物拦截到一个线程,让该线程等待,再拦截下一个线程,也让该线程等待,至到拦截到总共 3 个线程。
这时,障碍物才同是让这 3 个线程通过。设置障碍点代码:cb.await();。在本代码中,设置了三个障碍点。
package three.day.thread;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CyclicBarrierTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final CyclicBarrier cb = new CyclicBarrier(3);
for(int i=0;i<3;i++){
Runnable runnable = new Runnable(){
public void run(){
try {
Thread.sleep((long)(Math.random()*10000));
System.out.println("线程" + Thread.currentThread().getName() +
"即将到达障碍点1,当前已有" + cb.getNumberWaiting() + "个已经到达,正在等候");
cb.await();
Thread.sleep((long)(Math.random()*10000));
System.out.println("线程" + Thread.currentThread().getName() +
"即将到达障碍点2,当前已有" + cb.getNumberWaiting() + "个已经到达,正在等候");
cb.await();
Thread.sleep((long)(Math.random()*10000));
System.out.println("线程" + Thread.currentThread().getName() +
"即将到达障碍点3,当前已有" + cb.getNumberWaiting() + "个已经到达,正在等候");
cb.await();
} catch (Exception e) {
e.printStackTrace();
}
}
};
service.execute(runnable);
}
service.shutdown();
}
}
本例代码运行效果:
线程pool-1-thread-3即将到达障碍点1,当前已有0个已经到达,正在等候
线程pool-1-thread-2即将到达障碍点1,当前已有1个已经到达,正在等候
线程pool-1-thread-1即将到达障碍点1,当前已有2个已经到达,正在等候
线程pool-1-thread-2即将到达障碍点2,当前已有0个已经到达,正在等候
线程pool-1-thread-1即将到达障碍点2,当前已有1个已经到达,正在等候
线程pool-1-thread-3即将到达障碍点2,当前已有2个已经到达,正在等候
线程pool-1-thread-3即将到达障碍点3,当前已有0个已经到达,正在等候
线程pool-1-thread-2即将到达障碍点3,当前已有1个已经到达,正在等候
线程pool-1-thread-1即将到达障碍点3,当前已有2个已经到达,正在等候
- Java多线程之CyclicBarrier(一)
- JAVA多线程之(CyclicBarrier)
- Java多线程之CyclicBarrier
- Java多线程之CyclicBarrier
- JAVA多线程之CyclicBarrier
- Java多线程之CyclicBarrier
- Java多线程之CyclicBarrier
- Java多线程之----CyclicBarrier
- Java 多线程之CyclicBarrier
- java多线程学习(一) 之 CountDownLatch和CyclicBarrier
- Java多线程技术之CyclicBarrier
- (九)java多线程之CyclicBarrier
- 【java】多线程控制(一)---Semaphore、Exchanger、CyclicBarrier、CountDownLatch
- Java多线程(八)之Semaphore、CountDownLatch、CyclicBarrier、Exchanger
- Java多线程之concurrent包(五)——CyclicBarrier
- Java多线程(八)之Semaphore、CountDownLatch、CyclicBarrier、Exchanger
- java多线程问题之同步器CyclicBarrier
- Java多线程同步工具之CyclicBarrier
- Warning: Attempt to present A on B whose view is not in the window hierarchy!
- Polay定理总结
- order by 、group by 、having的用法区别
- 动画效果之360桌面清除动画(一)
- Android_Fragment_Fragment详解
- Java多线程之CyclicBarrier(一)
- Tomcat从零开始(十六)-----tomcat安全
- 排序算法_堆排序
- A+B Problem
- 黑马程序员————————C#基础知识(二)
- NewStart
- Android SDK更新以及ADT更新出现问题的解决
- JavaSE初学(三)——面向对象2
- 10个最容易犯的HTML标签错误