java多线程-Thread线程调度CyclicBarrier循环屏障
来源:互联网 发布:淘宝店装修模板自己做 编辑:程序博客网 时间:2024/06/05 05:59
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
/**
* 2017-4-7
* author:饶为
* Administrator
*/
public class WaterCyclic extends Thread{
int time;
CyclicBarrier barrier;
/**
* @param time
* @param barrier
*/
public WaterCyclic(int time, CyclicBarrier barrier) {
super();
this.time = time;
this.barrier = barrier;
}
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
public void run() {
// TODO Auto-generated method stub
System.out.println("装水ing。。。");
try {
Thread.sleep(time);
System.out.println("这个装满了,等待其他装满");
barrier.await();
System.out.println("都装满了");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
执行结果如下package Thread;
import java.util.concurrent.CyclicBarrier;
/**
* 2017-4-7
* author:饶为
* Administrator
*/
public class CyclicBarrierTest1 {
public static void main(String[] args) {
CyclicBarrier barrier = new CyclicBarrier(2);
WaterCyclic water1 = new WaterCyclic(15000, barrier);
WaterCyclic water2 = new WaterCyclic(7000, barrier);
water1.start();
water2.start();
WaterCyclic water3 = new WaterCyclic(1000, barrier);//重复利用了barrier
WaterCyclic water4 = new WaterCyclic(2000, barrier);
water3.start();
water4.start();
}
}
那么会发现,进程都在都是运行,但是运行完两个后,就开始显示“都装满了”,然后再继续执行下面两个进程,原因是因为代码设定了CyclicBarrier barrier = new CyclicBarrier(2); 注意:这里的数字要和执行的进程数相同,进程数是它的倍数,否则会死锁。装水ing。。。
装水ing。。。
装水ing。。。
装水ing。。。
这个装满了,等待其他装满
这个装满了,等待其他装满
都装满了
都装满了
这个装满了,等待其他装满
这个装满了,等待其他装满
Picked up _JAVA_OPTIONS: -Xms128M -Xmx1024M
都装满了
都装满了
CyclicBarrier和CountDownLatch 都位于Java.util.concurrent 这个包下
PS: 上面总结的非常完整了。可重复利用,在上面代码中已经做到了。
什么都没做,就是输出一个test。package Thread;
/**
* 2017-4-7
* author:饶为
* Administrator
*/
public class Test extends Thread {
public Test(){
}
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
public void run() {
// TODO Auto-generated method stub
System.out.println("test");
}
}
那么执行结果Test test = new Test();
CyclicBarrier barrier = new CyclicBarrier(2,test);
这里就可以看出,当两个进程都执行完后,直接跳入另一个进程执行,执行完后,再执行原来进程下没执行完的代码。这里是有这个先后顺序的,大家注意下。装水ing。。。
装水ing。。。
装水ing。。。
装水ing。。。
这个装满了,等待其他装满
这个装满了,等待其他装满
test
都装满了
都装满了
这个装满了,等待其他装满
这个装满了,等待其他装满
test
都装满了
都装满了
- java多线程-Thread线程调度CyclicBarrier循环屏障
- Java多线程/并发23、循环屏障CyclicBarrier
- Java多线程编程-(6)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier
- Java多线程编程-(8)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier
- Java多线程--同步屏障CyclicBarrier
- Java的CyclicBarrier(循环屏障)
- java多线程Thread-线程调度类CountDownLatch计数器
- 两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier
- 可循环使用的屏障CyclicBarrier
- Java线程(Thread)调度
- java-day07-Thread-线程调度
- Java 多线程 线程互相等待 CyclicBarrier
- Java笔记:CountDownLatch - 计数锁存器、Future、CyclicBarrier - 循环屏障 和 Semaphore - 信号量
- Java多线程与并发库高级应用之公共屏障点CyclicBarrier
- Java 多线程CountDownLatch、CyclicBarrier、Thread.join方法基本用法
- java.util.concurrent中:同步屏障CyclicBarrier
- java并发之同步屏障CyclicBarrier
- 【Java并发】(二) 线程同步之Thread.join()、CountDownLatch、CyclicBarrier
- java读取图片插入blob,并取出
- 【持续更新】简单记录一下常用的设计模式
- java多线程Thread-线程调度类CountDownLatch计数器
- RunTime 大神之路
- html乱码,文件乱码
- java多线程-Thread线程调度CyclicBarrier循环屏障
- java多线程Thread-Semaphore控制信号量
- Redis.config配置详解
- java多线程-Thread两个线程交换数据Exchanger
- git常用命令
- 举栗说明iaas、SaaS和paas的区别
- 将博客搬至CSDN
- jdbc连接MySQL数据库(完整文件+详细说明)
- tensorflow saver 保存和恢复指定 tensor