package de.bvb;

import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.TimeUnit; /**
* java 线程 障碍器
*
* Java5中,添加了障碍器类,为了适应一种新的设计需求,
* 比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候
* ,才能执行主任务,这时候,就可以选择障碍器了。
*
*/
public class Test4 {
public static void main(String[] args) {
final int subTaskCounts = 5;
Thread mainTask = new Thread(new MainTask());
// 不能调用start方法,障碍器中会自动调用start方法,否则主任务可能会立即执行
// mainTask.start();
CyclicBarrier cyclicBarrier = new CyclicBarrier(subTaskCounts, mainTask);
for (int i = 0; i < subTaskCounts; i++) {
Thread subTask = new Thread(new SubTask("任务" + i, cyclicBarrier));
subTask.start();
}
}
} class SubTask implements Runnable {
private String taskName;
private CyclicBarrier cyclicBarrier; public SubTask(String taskName, CyclicBarrier cyclicBarrier) {
super();
this.taskName = taskName;
this.cyclicBarrier = cyclicBarrier;
} @Override
public void run() {
try {
System.out.println(taskName + "开始执行任务...");
TimeUnit.SECONDS.sleep(2);// 模拟耗时任务
System.out.println(taskName + "已经执行完了,并通知障碍器已经完成");
cyclicBarrier.await();// 通知障碍器已经完成
} catch (Exception e) {
e.printStackTrace();
} }
} class MainTask implements Runnable {
@Override
public void run() {
System.out.println("主任务最后执行....");
}
}

程序执行结果:

来源 http://lavasoft.blog.51cto.com/62575/222738

java 线程 障碍器的更多相关文章

  1. (转)Java线程:新特征-原子量,障碍器

    Java线程:新特征-原子量   所谓的原子量即操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的.   为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题.在Java5之前 ...

  2. java并发编程(十九)障碍器CyclicBarrier

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17512983 CyclicBarrier(又叫障碍器)同样是Java 5中加入的新特性,使 ...

  3. 转:【Java并发编程】之二十二:并发新特性—障碍器CyclicBarrier(含代码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17512983 CyclicBarrier(又叫障碍器)同样是Java5中加入的新特性,使用 ...

  4. 【Java并发编程】:并发新特性—障碍器CyclicBarrier

    CyclicBarrier(又叫障碍器)同样是Java5中加入的新特性,使用时需要导入Java.util.concurrent.CylicBarrier.它适用于这样一种情况:你希望创建一组任务,它们 ...

  5. Java并发编程--5.信号量和障碍器

    Semaphore信号量 简介 它本质上是一个共享锁,限制访问公共资源的线程数目,它也被称为计数信号量acquire()许可一个线程, Semaphore – 1; 没有可用的许可时,Semaphor ...

  6. JAVA类加载器概念与线程类加载器

    类加载器的功能:通过一个类的全限定名来获取描述此类的二进制字节流的过程 java的类加载器大致可以分为两类,一类是系统提供的,一类是由应用开发人员编写的.系统提供的类加载器有以下三种: 引导类加载器( ...

  7. Java线程新特征——Java并发库

    一.线程池   Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定 ...

  8. Java线程:概念与原理

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  9. java线程详解

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

随机推荐

  1. struts2上传图片的全过程

    struts2上传图片的过程 1.写一个上传的jsp页面upload_image.jsp,内容如下:<body><center>    <font color=" ...

  2. mvc 学习(一)

    1.a标签里三元运算符的写法 : <a href="/Travel/TravelAbroadList/@ViewData["searchname"]_0_@View ...

  3. Full exploitation of a cluster hardware configuration requires some enhancements to a single-system operating system.

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION Operating System Desi ...

  4. 深入解析PHP中逗号与点号的区别

    大部分同学都知道逗号要比点号快,但就是不知道为什么,更不知道逗号与点号这两者之间到底有什么区别.下面小编就来详细的为大家介绍一下,需要的朋友可以过来参考下 echo 'abc'.'def'; //用点 ...

  5. Title Case a Sentence

    解决思路 将字符串转换成小写 把字符串分割成字符串数组 循环数组将每一个单词首字母大写 把数组所有的元素转换成一个字符串 第一种方法 function titleCase(str) { str=str ...

  6. @Html.Raw()

    在用VS 2015写代码时,匹配邮箱的正则表达式 /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/​ @报错  主要因为 @是MVC里的关键字,所以不能直 ...

  7. http工作流程

    一次HTTP操作称为一个事务,其工作过程可分为四步:1)首先客户机与服务器需要建立连接.只要单击某个超级链接,HTTP的工作开始.2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源 ...

  8. Hire Me, Microsoft China

    为微软中国工作是一个愿望.对于其他的股票期权,令人难以置信的小吃店或很酷的工作室,引诱他们的可能性.很多人都想为微软中国工作,谁知道,也许你就是其中之一.这个博客是专门为在微软中国工作.做它的工作空缺 ...

  9. dragdrop 修改版

    <!DOCTYPE html> <html lang="en"> <head> <meta name="keywords&quo ...

  10. 在eclipse中使用正则表达式进行搜素