源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java线程并发cyclicbarrier类使用示例

  • 时间:2020-02-01 09:36 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java线程并发cyclicbarrier类使用示例
[u]复制代码[/u] 代码如下:
package com.yao; import java.util.Random; import java.util.concurrent.CyclicBarrier; /**  * CyclicBarrier类似于CountDownLatch也是个计数器,  * 不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数,  * 当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续。  * CyclicBarrier就象它名字的意思一样,可看成是个障碍,  * 所有的线程必须到齐后才能一起通过这个障碍。  * CyclicBarrier初始时还可带一个Runnable的参数,  * 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。  */ public class CyclicBarrierTest {  public static class ComponentThread implements Runnable {   CyclicBarrier barrier;// 计数器   int ID; // 组件标识   int[] array; // 数据数组   // 构造方法   public ComponentThread(CyclicBarrier barrier, int[] array, int ID) {    this.barrier = barrier;    this.ID = ID;    this.array = array;   }   public void run() {    try {     array[ID] = new Random().nextInt(100);     System.out.println("Component " + ID + " generates: " + array[ID]);     // 在这里等待Barrier处     System.out.println("Component " + ID + " sleep...");     barrier.await();     System.out.println("Component " + ID + " awaked...");     // 计算数据数组中的当前值和后续值     int result = array[ID] + array[ID + 1];     System.out.println("Component " + ID + " result: " + result);    } catch (Exception ex) {    }   }  }  /**   * 测试CyclicBarrier的用法   */  public static void testCyclicBarrier() {   final int[] array = new int[3];   CyclicBarrier barrier = new CyclicBarrier(2, new Runnable() {    // 在所有线程都到达Barrier时执行    public void run() {     System.out.println("testCyclicBarrier run...");     array[2] = array[0] + array[1];    }   });   // 启动线程   new Thread(new ComponentThread(barrier, array, 0)).start();   new Thread(new ComponentThread(barrier, array, 1)).start();  }  public static void main(String[] args) {   CyclicBarrierTest.testCyclicBarrier();  } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部