Java线程:新特征-障碍器

2023-11-03

本文转载至:http://lavasoft.blog.51cto.com/62575/222738

Java5中,添加了障碍器类,为了适应一种新的设计需求,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择障碍器了。
 
障碍器是多线程并发控制的一种手段,用法很简单。下面给个例子:

import java.util.concurrent.BrokenBarrierException; 
import java.util.concurrent.CyclicBarrier; 

/** 
* Java线程:新特征-障碍器 
* 
* @author leizhimin 2009-11-6 10:50:10 
*/ 
public class Test { 
        public static void main(String[] args) { 
                //创建障碍器,并设置MainTask为所有定数量的线程都达到障碍点时候所要执行的任务(Runnable) 
                CyclicBarrier cb = new CyclicBarrier(7, new MainTask()); 
                new SubTask("A", cb).start(); 
                new SubTask("B", cb).start(); 
                new SubTask("C", cb).start(); 
                new SubTask("D", cb).start(); 
                new SubTask("E", cb).start(); 
                new SubTask("F", cb).start(); 
                new SubTask("G", cb).start(); 
        } 
} 

/** 
* 主任务 
*/ 
class MainTask implements Runnable { 
        public void run() { 
                System.out.println(">>>>主任务执行了!<<<<"); 
        } 
} 

/** 
* 子任务 
*/ 
class SubTask extends Thread { 
        private String name; 
        private CyclicBarrier cb; 

        SubTask(String name, CyclicBarrier cb) { 
                this.name = name; 
                this.cb = cb; 
        } 

        public void run() { 
                System.out.println("[子任务" + name + "]开始执行了!"); 
                for (int i = 0; i < 999999; i++) ;    //模拟耗时的任务 
                System.out.println("[子任务" + name + "]开始执行完成了,并通知障碍器已经完成!"); 
                try { 
                        //通知障碍器已经完成 
                        cb.await(); 
                } catch (InterruptedException e) { 
                        e.printStackTrace(); 
                } catch (BrokenBarrierException e) { 
                        e.printStackTrace(); 
                } 
        } 
}

运行结果:

[子任务E]开始执行了! 
[子任务E]开始执行完成了,并通知障碍器已经完成! 
[子任务F]开始执行了! 
[子任务G]开始执行了! 
[子任务F]开始执行完成了,并通知障碍器已经完成! 
[子任务G]开始执行完成了,并通知障碍器已经完成! 
[子任务C]开始执行了! 
[子任务B]开始执行了! 
[子任务C]开始执行完成了,并通知障碍器已经完成! 
[子任务D]开始执行了! 
[子任务A]开始执行了! 
[子任务D]开始执行完成了,并通知障碍器已经完成! 
[子任务B]开始执行完成了,并通知障碍器已经完成! 
[子任务A]开始执行完成了,并通知障碍器已经完成! 
>>>>主任务执行了!<<<< 

从执行结果可以看出,所有子任务完成的时候,主任务执行了,达到了控制的目标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java线程:新特征-障碍器 的相关文章

  • (Java 基础知识) Java反射

    本篇文章依旧采用小例子来说明 因为我始终觉的 案例驱动是最好的 要不然只看理论的话 看了也不懂 不过建议大家在看完文章之后 在回过头去看看理论 会有更好的理解 下面开始正文 案例1 通过一个对象获得完整的包名和类名 1 2 3 4 5 6
  • Java 终止嵌套for 循环总结

    public class NestedLoopDemo public static void main String args 第一步 构建嵌套for 循环 for int i 0 i lt 10 i for int j 0 j lt 10
  • Java 反射 与 主要API

    控制你的大脑 控制你的行为 你会得到更多 收获很多 文章目录 一 反射相关的主要API 二 代码例子演示 三 反射测试类 一 反射相关的主要API API 名称 代表含义 Java lang class 代表一个类 java lang re
  • (java 功能篇)java 读取Propety配置文件

    java效果代码 源代码 package com rf test import java io IOException import java io InputStream import java util Properties publi
  • java 阻塞模式与非阻塞模式

    TCP IP 阻塞模式与非阻塞模式 java view plain copy print package concurrentTest import java io BufferedReader import java io IOExcep
  • Java线程:线程栈模型与线程的变量

    本文转载至 http lavasoft blog 51cto com 62575 99152 要理解线程调度的原理 以及线程执行过程 必须理解线程栈模型 线程栈是指某时刻时内存中线程调度的栈信息 当前调用的方法总是位于栈顶 线程栈的内容是随
  • Java线程:新特征-障碍器

    本文转载至 http lavasoft blog 51cto com 62575 222738 Java5中 添加了障碍器类 为了适应一种新的设计需求 比如一个大型的任务 常常需要分配好多子任务去执行 只有当所有子任务都执行完成时候 才能执
  • 线程管理之获取和设置线程信息

    获取和设置线程信息 Thread类的对象中保存了一些属性信息能够帮助我们来辨别每一个线程 知道它的状态 调整控制其优先级 这些属性是 ID 每个线程的独特标识 Name 线程的名称 Priority 线程对象的优先级 优先级别在1 10之间
  • Java 生成随机数全数字方式

    生成9位随机数字 System out println int Math random 9 1 100000000 生成8位随机数字 System out println int Math random 9 1 10000000 生成6位随
  • Java线程:新特征-有返回值的线程

    本文转载至 http lavasoft blog 51cto com 62575 222082 在Java5之前 线程是没有返回值的 常常为了 有 返回值 破费周折 而且代码很不好写 或者干脆绕过这道坎 走别的路了 现在Java终于有可返回
  • Java 数组 初始化方式 和遍历方式

    Java 数组 初始化方式总结 第一种 静态初始化 所谓静态初始化 初始化时由程序员显式指定每个数组元素的初始值 有系统决定数组的长度 简单实例 String strArr 张三 李四 王五 第二种 动态初始化 所谓动态初始化 初始化时由程
  • Java线程:新特征-信号量

    本文转载至 http lavasoft blog 51cto com 62575 222469 Java线程 新特征 信号量 Java的信号量实际上是一个功能完毕的计数器 对控制一定资源的消费与回收有着很重要的意义 信号量常常用于多线程的代
  • 使用 IO 流 读取 本 地 文 件 (两种方式)

    使用IO 流读取本地文件 public class FileReadWrite public static void main String args FileReader fr null try 1 创建读取文件 fr new FileR
  • Java线程:线程的调度-守护线程

    本文转载至 http lavasoft blog 51cto com 62575 221845 Java线程 线程的调度 守护线程 守护线程与普通线程写法上基本么啥区别 调用线程对象的方法setDaemon true 则可以将其设置为守护线
  • java 多线程 总结一

    首先讲一下进程和线程的区别 进程 每个进程都有独立的代码和数据空间 进程上下文 进程间的切换会有较大的开销 一个进程包含1 n个线程 线程 同一类线程共享代码和数据空间 每个线程有独立的运行栈和程序计数器 PC 线程切换开销小 线程和进程一
  • (java 基础知识) Java 安全套接字--javax.net.ssl

    有关SSL的原理和介绍在网上已经有不少 对于Java下使用keytool生成证书 配置SSL通信的教程也非常多 但如果我们不能够亲自动手做一个SSL Sever和SSL Client 可能就永远也不能深入地理解Java环境下 SSL的通信是
  • (Java 基础知识) Java线程池

    ExecutorService 建立多线程的步骤 1 定义线程类 class Handler implements Runnable 2 建立ExecutorService线程池 ExecutorService executorServic
  • java并发包:生产者消费者模式

    本文转载至 http blog csdn net a910626 article details 51900974 生产者消费者模式是一个经典的多线程设计模式 它为多线程间的协作提供了良好的解决方案 在生产者消费者模式中 通常有两类线程 即
  • java并发包:重入锁与Condition条件

    本文转载至 http blog csdn net a910626 article details 51900941 重入锁 这里介绍一下synchronized wait notify方法的替代品 或者说是增强版 重入锁 重入锁是可以完全替
  • (java 基础知识) Java打印---javax.print

    package com print import java io import javax print import javax print attribute import javax print attribute standard p

随机推荐

  • 微信小程序实现 3秒后自动跳转到指定页面

    需求描述 在某个页面 当用户点击 按钮 时 如果用户没有登录 则 3 秒后自动跳转到登录页面 思路 1 判断用户有没有进行登录 如果没有登录 那么就调用this delayTime 这个方法 2 首先写一个展示弹框的方法 this show
  • typescript interface定义数组每一项都为对象

    定义一个方法 返回一个数组 数组的每一项均为对象 对象中包含label和value两个属性 创建一个public ts文件 javascript实现 javascript 实现 export const formatYear functio
  • 基于深度卷积神经网络的小样本分割算法综述

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 本文转自 视学算法 介绍 深度卷积神经网络在图像分类 目标检测 语义分割等许多视觉理解任务上都取得了重大突破 一个关键的原因是大规模数据集的可用性 比如 ImageNet
  • Git使用个人访问令牌提交代码到仓库

    2021年8月13日开始 GitHub在使用Git操作远程仓库时不再支持使用用户名密码形式进行身份验证 需使用个人访问令牌 使用Git操作GitHub仓库时使用用户名密码进行身份验证会报错 一 创建个人访问令牌 1 1 在GitHub官网右
  • 复习:详解函数重载

    什么是函数重载 一组函数 处于同一个作用域 其中函数名相同 参数列表的个数或类型不同 那么这一组函数就成为函数重载 一组函数要称得上函数重载 一定是处在同一个作用域中函数名同 参数列表同 返回值不同 不叫重载 因为函数符号都相同函数重载是通
  • sprintf与snprintf区别

    sprintf的原型如下 int sprintf char str const char format sprintf是字符串格式化命令 主要功能是把格式化的数据写入字符串str中 返回值为写入str的字节数 结束字符 0 不计入内 其中
  • 用户交易数据分析 - 投资绩效归因分析-Brision模型

    1 模型介绍 通过业绩归因 能够更加清楚组合的收益究竟来源于什么 进而知道这种获取超额收益的能力是否能够持续 也能够明白组合发生剧烈波动的原因 从而改进策略 Brision模型中 将组合的收益分四部分 选股收益 在资产类别 或板块 内部 超
  • spring boot 之JPA详解

    JPA参考文档 JPA详解 jpa之分页 本地sql查询 注意表名啥的都用数据库中的名称 适用于特定数据库的查询 public interface UserRepository extends JpaRepository
  • Qt 槽机制:public slots 和 private slots

    今天在写Qt图片浏览器的时候 遇到了一个问题 Qt的界面是对的 但是功能却怎么也实现不了 点击开始按钮 无法显示打开文件夹的对话框 开始以为是信号连接或者是函数写错了 检查了好久都不知道问题在哪 最后 对着书上的代码一行行研究 才发现问题在
  • k8s第二节 Kubernetes入门、安装、创建Deployment、Service、pod调度 污点taint

    一 k8s的集群架构与组件 k8s也是一个Master 多个node节点 下面是kubernetes结婚的架构与组件 1 1 master组件介绍 组件名称 介绍 kube apiserver Kubernetes API 集群的统一入口
  • cgo+gSoap+onvif学习总结:2、wsl编译安装gSoap

    cgo gSoap onvif学习总结 2 wsl编译安装gSoap 文章目录 cgo gSoap onvif学习总结 2 wsl编译安装gSoap 1 前言 2 gSoap编译安装 wsl环境编译安装 3 最后 1 前言 结合官网安装教程
  • 用VB制作一个AI聊天机器人(001)

    从现在开始 我们要用VB做一款聊天机器人 材料 VB6 0 准备 拉出2个text控件 一个command控件 代码可以这样写 仅供参考 Private Sub Command1 Click If InStr LCase Text1 Tex
  • 简单聊一聊磁珠,电感和0R电阻

    磁珠 磁珠的材料是铁镁或铁镍合金 一般这些材料具有有很高的电阻率和磁导率 在高频率和高阻抗下 电感内线圈之间的电容值会最小 磁珠通常只适用于高频电路 因为在低频时 它们基本上是保有电感的完整特性 包含有电阻性和电抗性分量 因此会造成线路上的
  • 腾讯云16核服务器配置大全_16核CPU型号性能测评

    腾讯云16核CPU服务器有哪些配置可以选择 可以选择标准型S6 标准型SA3 计算型C6或标准型S5等 目前标准型S5云服务器有优惠活动 性价比高 计算型C6云服务器16核性能更高 轻量16核32G28M带宽优惠价3468元15个月 腾讯云
  • 在Vim中配置C++环境和插件

    介绍 本文章讲述了如何用coc nvim来安装coc clang插件 和如何安装前置要求 clangd npm nodejs 并配置 vimrc文件和clangd路径来让vim可以autofill cpp 目录 介绍 1 配置 vimrc
  • nc命令介绍

    一 简介 nc是netcat的简写 被用作一个简单 可靠的网络工具 二 作用 实现任意TCP UDP端口的侦听 nc可以作为server以TCP或UDP方式侦听指定端口 端口的扫描 nc可以作为client发起TCP或UDP连接 机器之间传
  • C++ Char操作

    C Char操作 1 字符处理函数 isalpha ch 如果ch是一个字母 返回非 int 0值 否则 返回 int 0 isalnum 判断是否是字母或者数字字符 isdigit 判断是否是数字字符 0 9 islower 判断是否是小
  • CentOS 查看系统版本和位数

    查看系统版本 方法一 cat etc redhat release 方法二 cat proc version 方法三 uname a 查看系统位数 64 or 32 方法一 getconf LONG BIT 方法二 file bin ls
  • Windows——Active Directory域服务安装与测试

    实验原理 在Windows server 2008 上安装域并创建域用户 将Win7加入到该域中 然后用域账户登录以及用Win7本地账户登录Win7 实验环境 Windows server 2008 域控制器 Win7 加入域的PC 在开始
  • Java线程:新特征-障碍器

    本文转载至 http lavasoft blog 51cto com 62575 222738 Java5中 添加了障碍器类 为了适应一种新的设计需求 比如一个大型的任务 常常需要分配好多子任务去执行 只有当所有子任务都执行完成时候 才能执