程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> Java中CyclicBarrier的用法分析

Java中CyclicBarrier的用法分析

編輯:JAVA編程入門知識

代碼如下:

public class TestCyclicBarrier {

     private static final int THREAD_NUM = 5;

     public static class WorkerThread implements Runnable{

         CyclicBarrier barrier;

         public WorkerThread(CyclicBarrier b){
             this.barrier = b;
         }

         @Override
         public void run() {
             // TODO Auto-generated method stub
             try{
                 System.out.println("Worker's waiting");
                 //線程在這裡等待,直到所有線程都到達barrier。
                 barrier.await();
                 System.out.println("ID:"+Thread.currentThread().getId()+" Working");
             }catch(Exception e){
                 e.printStackTrace();
             }
         }

     }

     /**
      * @param args
      */
     public static void main(String[] args) {
         // TODO Auto-generated method stub
         CyclicBarrier cb = new CyclicBarrier(THREAD_NUM, new Runnable() {
             //當所有線程到達barrier時執行
             @Override
             public void run() {
                 // TODO Auto-generated method stub
                 System.out.println("Inside Barrier");

             }
         });

         for(int i=0;i<THREAD_NUM;i++){
             new Thread(new WorkerThread(cb)).start();
         }
     }

 }
 /*
 以下是輸出:
 Worker's waiting
 Worker's waiting
 Worker's waiting
 Worker's waiting
 Worker's waiting
 Inside Barrier
 ID:12 Working
 ID:8 Working
 ID:11 Working
 ID:9 Working
 ID:10 Working
 */

1. CyclicBarrier初始化時規定一個數目,然後計算調用了CyclicBarrier.await()進入等待的線程數。當線程數達到了這個數目時,所有進入等待狀態的線程被喚醒並繼續。
2. CyclicBarrier就象它名字的意思一樣,可看成是個障礙, 所有的線程必須到齊後才能一起通過這個障礙。
3. CyclicBarrier初始時還可帶一個Runnable的參數, 此Runnable任務在CyclicBarrier的數目達到後,所有其它線程被喚醒前被執行。

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