zoukankan      html  css  js  c++  java
  • Java基础之线程障碍器

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

    package unit_fifteen;
    import java.util.concurrent.BrokenBarrierException;
    import java.util.concurrent.CyclicBarrier;
    
    /** 
    * Java线程:新特征-障碍器
    *  
    */ 
    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(); 
                    } 
            } 
    }
  • 相关阅读:
    python网络编程 — HTTP客户端
    实验吧Web-天网管理系统
    实验吧Web-FALSE
    实验吧Web-Forms
    离散数学-集合运算基本法则
    sublime text3编译运行C,Java程序的一些配置
    kali Rolling 安装QQ和虚拟机
    python并行任务之生产消费模式
    Linux磁盘管理
    python网络编程之网络主机信息
  • 原文地址:https://www.cnblogs.com/yyxiangjava/p/5833786.html
Copyright © 2011-2022 走看看