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!