• java多线程之CyclicBarrier类


      1 import java.util.ArrayList;
      2 import java.util.List;
      3 import java.util.Random;
      4 import java.util.concurrent.BrokenBarrierException;
      5 import java.util.concurrent.CyclicBarrier;
      6 import java.util.concurrent.ExecutorService;
      7 import java.util.concurrent.Executors;
      8 import java.util.concurrent.TimeUnit;
      9 
     10 class Horse implements Runnable{
     11     private static int counter = 0;
     12     private final int id = counter++;
     13     private int strides = 0; //跨步
     14     private static Random rand = new Random(47);
     15     private static CyclicBarrier barrier;//环形栅栏
     16     public Horse(CyclicBarrier b){
     17         barrier = b;
     18     }
     19     public synchronized int getStrides() { return strides; } //返回现在到达的地点
     20     
     21     @Override
     22     public void run() {
     23         // TODO Auto-generated method stub
     24         try{
     25             while(!Thread.interrupted()){
     26                 synchronized(this){
     27                     strides += rand.nextInt(3);
     28                 }
     29                 barrier.await();//使计数器减1
     30             }
     31         }catch(InterruptedException e){
     32             return;
     33         }catch(BrokenBarrierException e) {
     34             // TODO Auto-generated catch block
     35             throw new RuntimeException(e);
     36         }
     37     }
     38     
     39     public String toString(){ 
     40         return "Horse " + id +" ";
     41     }
     42     public String tracks(){ //足迹、跟踪
     43         StringBuilder s = new StringBuilder();
     44         for(int i = 0;i<getStrides();i++){
     45             s.append("*");
     46         }
     47         s.append(id);
     48         return s.toString();
     49     }
     50 }
     51 
     52 
     53 public class HorseRace {
     54     static final int FINISH_LINE = 75;
     55     private List<Horse> horses = new ArrayList<Horse>();   //保存每匹马的信息
     56     private ExecutorService exec = Executors.newCachedThreadPool();
     57     private CyclicBarrier barrier;
     58     public HorseRace(int nHorses,final int pause){
     59         barrier = new CyclicBarrier(nHorses,new Runnable(){ //当计数减到0时自动执行1次
     60             @Override
     61             public void run() {
     62                 // TODO Auto-generated method stub
     63                 StringBuilder s = new StringBuilder();
     64                 for(int i=0;i<FINISH_LINE;i++){
     65                     s.append("=");
     66                 }
     67                 System.out.println(s);
     68                 for(Horse horse : horses){
     69                     System.out.println(horse.tracks());
     70                 }
     71                 for(Horse horse : horses){
     72                     if(horse.getStrides()>=FINISH_LINE) {
     73                         System.out.println(horse + "won!");
     74                         exec.shutdownNow();
     75                         return;
     76                     }
     77                 }
     78                 try{
     79                     TimeUnit.MILLISECONDS.sleep(pause);
     80                 }catch(InterruptedException e){
     81                     System.out.println("栅栏阻塞中断!!");
     82                 }
     83             }
     84             
     85         });
     86         
     87         for(int i=0;i<nHorses;i++){
     88             Horse horse = new Horse(barrier);
     89             horses.add(horse);
     90             exec.execute(horse); //增加七匹马
     91         }
     92         
     93     } 
     94     /**
     95      * @param args
     96      */
     97     public static void main(String[] args) {
     98         // TODO Auto-generated method stub
     99         int nHorses = 7;
    100         int pause = 200;
    101         new HorseRace(nHorses,pause);
    102     }
    103 }

    运行结果:

    ===========================================================================
    **0
    **1
    **2
    *3
    **4
    *5
    *6
    ===========================================================================
    ****0
    ***1
    **2
    *3
    **4
    **5
    *6
    ===========================================================================
    *****0
    *****1
    ***2
    ***3
    ***4
    ***5
    **6
    ===========================================================================
    *****0
    ******1
    ****2
    *****3
    *****4
    ***5
    **6
    ===========================================================================
    ******0
    ********1
    ****2
    ******3
    ******4
    ***5
    ***6
    ===========================================================================
    ******0
    *********1
    ****2
    *******3
    ******4
    *****5
    ***6
    ===========================================================================
    ********0
    **********1
    ****2
    ********3
    *******4
    ******5
    ***6
    ===========================================================================
    **********0
    **********1
    *****2
    *********3
    *********4
    *******5
    ****6
    ===========================================================================
    **********0
    **********1
    *****2
    *********3
    ***********4
    ********5
    ****6
    ===========================================================================
    ***********0
    **********1
    *******2
    **********3
    ***********4
    *********5
    ******6
    ===========================================================================
    ************0
    ************1
    *******2
    ************3
    ***********4
    *********5
    ******6
    ===========================================================================
    **************0
    *************1
    *********2
    *************3
    ***********4
    ***********5
    ********6
    ===========================================================================
    **************0
    ***************1
    **********2
    ***************3
    ************4
    ***********5
    ********6
    ===========================================================================
    ****************0
    ***************1
    ************2
    ****************3
    ************4
    ************5
    ********6
    ===========================================================================
    *****************0
    *****************1
    **************2
    ****************3
    ************4
    ************5
    ********6
    ===========================================================================
    *******************0
    *****************1
    ****************2
    ******************3
    *************4
    *************5
    ********6
    ===========================================================================
    *********************0
    ******************1
    *****************2
    ********************3
    *************4
    ***************5
    *********6
    ===========================================================================
    *********************0
    *******************1
    ******************2
    *********************3
    ***************4
    ***************5
    *********6
    ===========================================================================
    *********************0
    *******************1
    *******************2
    ***********************3
    *****************4
    ***************5
    *********6
    ===========================================================================
    *********************0
    ********************1
    *******************2
    *************************3
    *******************4
    ****************5
    ***********6
    ===========================================================================
    ***********************0
    ********************1
    *******************2
    **************************3
    *********************4
    ******************5
    *************6
    ===========================================================================
    *************************0
    *********************1
    *******************2
    ***************************3
    *********************4
    ********************5
    ***************6
    ===========================================================================
    *************************0
    *********************1
    *********************2
    ****************************3
    **********************4
    **********************5
    ****************6
    ===========================================================================
    *************************0
    *********************1
    ***********************2
    ******************************3
    **********************4
    ************************5
    ******************6
    ===========================================================================
    **************************0
    *********************1
    ************************2
    ******************************3
    **********************4
    ************************5
    ********************6
    ===========================================================================
    ***************************0
    ***********************1
    **************************2
    *******************************3
    ***********************4
    *************************5
    ********************6
    ===========================================================================
    ***************************0
    *************************1
    ****************************2
    *******************************3
    ************************4
    *************************5
    *********************6
    ===========================================================================
    ****************************0
    ***************************1
    ****************************2
    *********************************3
    *************************4
    **************************5
    *********************6
    ===========================================================================
    ****************************0
    *****************************1
    ****************************2
    **********************************3
    **************************4
    ***************************5
    ***********************6
    ===========================================================================
    *****************************0
    *****************************1
    ******************************2
    ***********************************3
    ****************************4
    ****************************5
    *************************6
    ===========================================================================
    *******************************0
    *****************************1
    ******************************2
    *************************************3
    ****************************4
    ****************************5
    ***************************6
    ===========================================================================
    ********************************0
    *******************************1
    *******************************2
    *************************************3
    ****************************4
    *****************************5
    ****************************6
    ===========================================================================
    ********************************0
    *******************************1
    *********************************2
    *************************************3
    *****************************4
    *****************************5
    ******************************6
    ===========================================================================
    ********************************0
    *********************************1
    ***********************************2
    *************************************3
    *******************************4
    ******************************5
    ********************************6
    ===========================================================================
    ********************************0
    *********************************1
    ************************************2
    *************************************3
    *******************************4
    ********************************5
    *********************************6
    ===========================================================================
    ********************************0
    *********************************1
    ************************************2
    *************************************3
    ********************************4
    ********************************5
    ***********************************6
    ===========================================================================
    **********************************0
    ***********************************1
    *************************************2
    *************************************3
    *********************************4
    ********************************5
    ***********************************6
    ===========================================================================
    ***********************************0
    ***********************************1
    ***************************************2
    *************************************3
    ***********************************4
    *********************************5
    ***********************************6
    ===========================================================================
    *************************************0
    ************************************1
    ***************************************2
    ***************************************3
    *************************************4
    **********************************5
    *************************************6
    ===========================================================================
    ***************************************0
    *************************************1
    ****************************************2
    ***************************************3
    ***************************************4
    **********************************5
    ***************************************6
    ===========================================================================
    ****************************************0
    ***************************************1
    *****************************************2
    ***************************************3
    ****************************************4
    ************************************5
    ***************************************6
    ===========================================================================
    ******************************************0
    *****************************************1
    ******************************************2
    ****************************************3
    *****************************************4
    **************************************5
    ***************************************6
    ===========================================================================
    *******************************************0
    *****************************************1
    ******************************************2
    ******************************************3
    ******************************************4
    ***************************************5
    *****************************************6
    ===========================================================================
    *******************************************0
    *******************************************1
    ******************************************2
    ******************************************3
    ********************************************4
    ***************************************5
    *****************************************6
    ===========================================================================
    ********************************************0
    *********************************************1
    ******************************************2
    ********************************************3
    ********************************************4
    *****************************************5
    *******************************************6
    ===========================================================================
    ********************************************0
    **********************************************1
    ******************************************2
    *********************************************3
    **********************************************4
    *******************************************5
    *******************************************6
    ===========================================================================
    *********************************************0
    ************************************************1
    ********************************************2
    ***********************************************3
    ***********************************************4
    *********************************************5
    ********************************************6
    ===========================================================================
    **********************************************0
    **************************************************1
    *********************************************2
    ************************************************3
    *************************************************4
    *********************************************5
    *********************************************6
    ===========================================================================
    ************************************************0
    **************************************************1
    ***********************************************2
    **************************************************3
    **************************************************4
    **********************************************5
    **********************************************6
    ===========================================================================
    *************************************************0
    ****************************************************1
    *************************************************2
    ***************************************************3
    ***************************************************4
    ************************************************5
    ***********************************************6
    ===========================================================================
    ***************************************************0
    ******************************************************1
    ***************************************************2
    *****************************************************3
    ***************************************************4
    ************************************************5
    ***********************************************6
    ===========================================================================
    ***************************************************0
    ******************************************************1
    *****************************************************2
    *****************************************************3
    ***************************************************4
    *************************************************5
    *************************************************6
    ===========================================================================
    ****************************************************0
    ******************************************************1
    ******************************************************2
    *****************************************************3
    ****************************************************4
    **************************************************5
    **************************************************6
    ===========================================================================
    ****************************************************0
    ********************************************************1
    *******************************************************2
    *****************************************************3
    ******************************************************4
    **************************************************5
    ***************************************************6
    ===========================================================================
    ******************************************************0
    **********************************************************1
    *******************************************************2
    ******************************************************3
    ********************************************************4
    **************************************************5
    ****************************************************6
    ===========================================================================
    ******************************************************0
    ************************************************************1
    ********************************************************2
    *******************************************************3
    **********************************************************4
    **************************************************5
    ******************************************************6
    ===========================================================================
    ********************************************************0
    *************************************************************1
    *********************************************************2
    *********************************************************3
    ************************************************************4
    ****************************************************5
    ******************************************************6
    ===========================================================================
    *********************************************************0
    ***************************************************************1
    *********************************************************2
    ***********************************************************3
    **************************************************************4
    ******************************************************5
    ******************************************************6
    ===========================================================================
    ***********************************************************0
    ***************************************************************1
    **********************************************************2
    ***********************************************************3
    ***************************************************************4
    ******************************************************5
    ******************************************************6
    ===========================================================================
    ***********************************************************0
    ****************************************************************1
    ***********************************************************2
    *************************************************************3
    ***************************************************************4
    ********************************************************5
    ********************************************************6
    ===========================================================================
    *************************************************************0
    ****************************************************************1
    ************************************************************2
    *************************************************************3
    *****************************************************************4
    ********************************************************5
    *********************************************************6
    ===========================================================================
    *************************************************************0
    ******************************************************************1
    *************************************************************2
    **************************************************************3
    *****************************************************************4
    ********************************************************5
    ***********************************************************6
    ===========================================================================
    ***************************************************************0
    ********************************************************************1
    **************************************************************2
    **************************************************************3
    *****************************************************************4
    ********************************************************5
    ************************************************************6
    ===========================================================================
    ****************************************************************0
    **********************************************************************1
    ***************************************************************2
    ***************************************************************3
    *******************************************************************4
    *********************************************************5
    **************************************************************6
    ===========================================================================
    *****************************************************************0
    ***********************************************************************1
    ***************************************************************2
    ***************************************************************3
    *******************************************************************4
    ***********************************************************5
    **************************************************************6
    ===========================================================================
    *****************************************************************0
    ************************************************************************1
    *****************************************************************2
    ***************************************************************3
    ********************************************************************4
    ************************************************************5
    ****************************************************************6
    ===========================================================================
    *******************************************************************0
    *************************************************************************1
    ******************************************************************2
    ***************************************************************3
    ********************************************************************4
    **************************************************************5
    ******************************************************************6
    ===========================================================================
    *********************************************************************0
    **************************************************************************1
    *******************************************************************2
    ***************************************************************3
    **********************************************************************4
    ****************************************************************5
    ******************************************************************6
    ===========================================================================
    ***********************************************************************0
    **************************************************************************1
    ********************************************************************2
    ****************************************************************3
    ***********************************************************************4
    ****************************************************************5
    ********************************************************************6
    ===========================================================================
    *************************************************************************0
    ****************************************************************************1
    **********************************************************************2
    ****************************************************************3
    ***********************************************************************4
    ****************************************************************5
    **********************************************************************6
    Horse 1 won!

  • 相关阅读:
    Spring 增强类型
    Spring IOC及Bean的生命周期
    Spring
    Mybatis注解
    MyBatis关联查询
    LoadRunner(1)
    Selenium(6)
    Selenium(5)
    Selenium(4)
    Selenium(3)
  • 原文地址:https://www.cnblogs.com/_programmer/p/3396619.html
Copyright © 2020-2023  润新知