JAva CyclicBarrier循環障害ブロック

3781 ワード

詳細

//       ,           ,            (common barrier point)。                ,             ,   CyclicBarrier    。    barrier             ,          barrier。CyclicBarrier         Runnable   ,                 (          ),              。                  ,         。 


//  parties、count barrierCommand  。   
CyclicBarrier(int):   
  
// await            ,     Runnable  。   
CyclicBarrier(int,Runnable):   
  
//  barrier        
await(): 


     
      ,         ,              ,               ,       ,   ,     CyclicBarrier 。 

     
             。            ,        。          ,        。      ,    。         ,            ,       。   CyclicBarrier     。   : 

/**  
 *       ,    。        ,                    ,    。  
 *      
 */  
public class Total {   
  
    // private ConcurrentHashMap result = new ConcurrentHashMap();   
  
    public static void main(String[] args) {   
        TotalService totalService = new TotalServiceImpl();   
        CyclicBarrier barrier = new CyclicBarrier(5,   
                new TotalTask(totalService));   
  
        //             code   ,    ,  code      。   
        new BillTask(new BillServiceImpl(), barrier, "  ").start();   
        new BillTask(new BillServiceImpl(), barrier, "  ").start();   
        new BillTask(new BillServiceImpl(), barrier, "  ").start();   
        new BillTask(new BillServiceImpl(), barrier, "  ").start();   
        new BillTask(new BillServiceImpl(), barrier, "   ").start();   
  
    }   
}   
  
/**  
 *    :      
 */  
class TotalTask implements Runnable {   
    private TotalService totalService;   
  
    TotalTask(TotalService totalService) {   
        this.totalService = totalService;   
    }   
  
    public void run() {   
        //             ,   。   
        totalService.count();   
        System.out.println("=======================================");   
        System.out.println("      ");   
    }   
}   
  
/**  
 *    :      
 */  
class BillTask extends Thread {   
    //        
    private BillService billService;   
    private CyclicBarrier barrier;   
    //   ,      ,       。   
    private String code;   
  
    BillTask(BillService billService, CyclicBarrier barrier, String code) {   
        this.billService = billService;   
        this.barrier = barrier;   
        this.code = code;   
    }   
  
    public void run() {   
        System.out.println("    --" + code + " --  !");   
        billService.bill(code);   
        //  bill        , ConcurrentHashMap,vector ,      
        System.out.println(code + "       ,     Service!");   
        try {   
            //   barrier       
            barrier.await();   
        } catch (InterruptedException e) {   
            e.printStackTrace();   
        } catch (BrokenBarrierException e) {   
            e.printStackTrace();   
        }   
    }   
  
} 

  : 
    --   --  ! 
    --   --  ! 
         ,     Service! 
    --   --  ! 
         ,     Service! 
         ,     Service! 
    --   --  ! 
         ,     Service! 
    --    --  ! 
          ,     Service!