程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java線程並發cyclicbarrier類應用示例

java線程並發cyclicbarrier類應用示例

編輯:關於JAVA

java線程並發cyclicbarrier類應用示例。本站提示廣大學習愛好者:(java線程並發cyclicbarrier類應用示例)文章只能為提供參考,不一定能成為您想要的結果。以下是java線程並發cyclicbarrier類應用示例正文



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();
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved