学习实践 JDK5 concurrent 并行包之CyclicBarrier

学习实践 JDK5 concurrent 并行包之CyclicBarrier

本部分介绍CyclicBarrier类,该类通ReentrantLock 跟Condition。Barrier 顾名思义,只有所有线程数达到规定的数量时,它才会被触发执行。
如下段代码 只有线程12都执行时,才会执行它定义的线程。

1  package  net.vincent.study.other;
 2 
 3  import  java.util.concurrent.BrokenBarrierException;
 4  import  java.util.concurrent.CyclicBarrier;
 5 
 6  public   class  part1 {
 7 
 8       /**
 9       * This static mehthod create CyclicBarrier, and this barrier will sleep 1000 if number of count arrive 
10       *  @param  number of count 
11       *  @return  a CyclicBarrier that will sleep if number of await thread invoke. 
12        */
13 
14       public   static  CyclicBarrier getCyclicBarrier( int  count){
15           if (count  <= 0 ) return   null ;
16            final  CyclicBarrier cyclicBarrier  =   new  CyclicBarrier(count, new  Runnable(){
17               public   void  run(){
18                   try  {
19                      Thread.sleep( 1000 );
20                  }  catch  (InterruptedException e) {
21                      e.printStackTrace();
22                  }
23                  System.out.println( " conditon is arrive and CycleBarrier is running " );
24              }
25          });
26           return  cyclicBarrier;
27      }
28       /**
29       * Create
30       *  @param  nameOfThread
31       *  @param  cyclicBarrier
32       *  @return
33        */
34       public   static  Thread getThread(String nameOfThread , final  CyclicBarrier  cyclicBarrier ){
35          Thread thread =   new  Thread(nameOfThread){
36           public   void  run(){
37                  System.out.println( this .getName() + " is begin; and count is  " + ( ++ count));
38               try  {
39                  cyclicBarrier.await();
40              }  catch  (InterruptedException e) {
41                   //  TODO Auto-generated catch block
42                  e.printStackTrace();
43              }  catch  (BrokenBarrierException e) {
44                   //  TODO Auto-generated catch block
45                  e.printStackTrace();
46              }
47              System.out.println( this .getName() + " finished " );
48              }
49          };
50           return  thread;
51          
52      }
53      
54       static    int  count  =   0 ;
55       public   static   void  main(String[] args) {
56           /**  define a cyclicBarrier and number of barrier is 2. */
57          CyclicBarrier cyclicBarrier   =  getCyclicBarrier( 2 );
58          Thread threadOne  =  getThread( " threadOne " ,cyclicBarrier);
59          threadOne.start();
60          Thread threadTwo  =  getThread( " threadTwo " ,cyclicBarrier);
61          threadTwo.start();
62 
63 
64      }
65 
66 
67  }
68 

你可能感兴趣的:(学习实践 JDK5 concurrent 并行包之CyclicBarrier)