java并发编程实战-CyclicBarrier和FutureTask使用
来源:互联网 发布:淘宝网店 虚拟 编辑:程序博客网 时间:2024/06/05 02:48
import java.util.concurrent.Callable;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.FutureTask;public class FutureTest {public static void main(String[] args) {new FutureTest().test();}public void test() {// 设置7个线程栅栏,为什么6个线程要设置7个栅栏,因为需要阻塞本线程等待6个线程的执行结果 final CyclicBarrier cb = new CyclicBarrier(7); // 创建6个服务 final Service[] assembles = new Service[6]; final FutureTask[] futureTasks = new FutureTask[6]; final Domain domain = new Domain(); assembles[0] = new Service0(); assembles[1] = new Service1(); assembles[2] = new Service2(); assembles[3] = new Service3(); assembles[4] = new Service4(); assembles[5] = new Service5(); for(int i = 0; i < 6; i++) { final int fi = i; futureTasks[i] = new FutureTask<Integer>(new Callable<Integer>() { @Override public Integer call() throws Exception { try { assembles[fi].assemble(domain); System.out.println(fi + "assemble"); } finally { cb.await(); } return fi; } }); new Thread(futureTasks[i]).start(); } try { cb.await(); } catch (Exception e) { System.err.println(e); } for(int i = 0; i < 6; i++) { try { System.out.println(futureTasks[i].get());} catch (Exception e) {// 获取Service5抛出的异常System.err.println(e);} } System.out.println(domain); }interface Service {void assemble(Domain domian);}class Domain{public String t0;public String t1;public String t2;public String t3;public String t4;@Overridepublic String toString() {return t0 + "-" +t1 + "-" +t2 + "-" +t3 + "-" + t4;}}class Service0 implements Service {@Overridepublic void assemble(Domain domian) {try {Thread.sleep(2000);} catch (InterruptedException e) {System.err.println(e);}domian.t0 = "0";}}class Service1 implements Service {@Overridepublic void assemble(Domain domian) {try {Thread.sleep(4000);} catch (InterruptedException e) {System.err.println(e);}domian.t1 = "1";}}class Service2 implements Service {@Overridepublic void assemble(Domain domian) {try {Thread.sleep(2000);} catch (InterruptedException e) {System.err.println(e);}domian.t2 = "2";}}class Service3 implements Service {@Overridepublic void assemble(Domain domian) {try {Thread.sleep(3000);} catch (InterruptedException e) {System.err.println(e);}domian.t3 = "3";}}class Service4 implements Service {@Overridepublic void assemble(Domain domian) {try {Thread.sleep(1000);} catch (InterruptedException e) {System.err.println(e);}domian.t4 = "4";}}class Service5 implements Service {@Overridepublic void assemble(Domain domian) {try {Thread.sleep(5000);} catch (InterruptedException e) {System.err.println(e);}throw new RuntimeException();}}}
阅读全文
0 0
- java并发编程实战-CyclicBarrier和FutureTask使用
- Java并发编程实战--FutureTask
- java 并发编程实战书籍学习 第五章,CountDownLatch,FutureTask,CyclicBarrier,Semaphore学习
- java并发编程中CountDownLatch和CyclicBarrier的使用 - [java]
- java并发编程中CountDownLatch和CyclicBarrier的使用
- java并发编程中CountDownLatch和CyclicBarrier的使用
- java并发编程中CountDownLatch和CyclicBarrier的使用
- java并发编程中CountDownLatch和CyclicBarrier的使用
- Java并发编程中CountDownLatch和CyclicBarrier的使用
- Java并发编程中CountDownLatch和CyclicBarrier的使用
- java并发编程中CountDownLatch和CyclicBarrier的使用
- Java并发编程中CountDownLatch和CyclicBarrier的使用
- java并发编程中CountDownLatch和CyclicBarrier的使用
- java并发编程中CountDownLatch和CyclicBarrier的使用
- java并发编程中CountDownLatch和CyclicBarrier的使用
- java并发编程中CountDownLatch和CyclicBarrier的使用
- Java并发编程中CountDownLatch和CyclicBarrier的使用
- Java并发编程中CountDownLatch和CyclicBarrier的使用
- HDU 6038 Function
- select2设置默认值
- 字符编码笔记:ASCII,Unicode和UTF-8
- 接口测试用例设计
- HTML+CSS渐变效果—理发店彩带
- java并发编程实战-CyclicBarrier和FutureTask使用
- 一个Java高级工程师的进阶之路
- Eclipse遇到的第一个问题
- 快速幂算法
- NodeBB 安装
- 传值和大图photoview
- redis集群的基本情况及常用命令
- 什么是尾递归,尾递归的优势以及语言支持情况说明
- 软件版本号规范与命名原则