转自:http://blackproof.iteye.com/blog/1525238
多个线程共同的等待一个操作(N-1),可以多次使用这个barrier对象,他不同于cutdownlatch锁,他可以多次重复使用
以下为实例:
- package com.common;
- import java.util.Random;
- import java.util.concurrent.CyclicBarrier;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.regex.Pattern;
- public class CyclicBarrierTest {
- public static void main(String[] args) {
- String value = "-43.23";
- String reg = "^(-?\\d+)(\\.\\d+)?$";
- Pattern pattern = Pattern.compile(reg); //正则
- pattern.matcher(value).toString();
- final CyclicBarrier barrier = new CyclicBarrier(10, new Runnable(){
- public void run() {
- System.out.println("大部队集合完毕了。");
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- });
- ExecutorService executor = Executors.newFixedThreadPool(10);
- for(int i = 0; i<10; i++){
- final int num = i;
- executor.execute(new Runnable(){
- public void run() {
- System.out.println("num: " + num + " 从公司出发了.");
- try {
- Thread.sleep(new Random().nextInt(1000));
- barrier.await(); // 在西湖等待大部队
- System.out.println("num: " + num + " 在西湖开始游玩.");
- Thread.sleep(new Random().nextInt(2000));
- barrier.await(); //等待大部队就餐
- } catch (Exception e1) {
- }
- }
- });
- }
- executor.shutdown();
- }
- }