share a CyclicBarrier

 
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class MainClass {
  CyclicBarrier barrier;

  List<Result> results = new ArrayList<Result>();

  static long timeConnect(String site) {
    long start = System.currentTimeMillis();
    try {
      new URL(site).openConnection().connect();
    } catch (IOException e) {
      return -1;
    }
    return System.currentTimeMillis() - start;
  }

  void showResults() {
    Collections.sort(results);
    for (Result result : results)
      System.out.printf("%-30.30s : %d\n", result.site, result.time);
    System.out.println("------------------");
  }

  public void start(String[] args) {
    Runnable showResultsAction = new Runnable() {
      public void run() {
        showResults();
        results.clear();
      }
    };
    barrier = new CyclicBarrier(args.length, showResultsAction);

    for (final String site : args)
      new Thread() {
        public void run() {
          while (true) {
            long time = timeConnect(site);
            results.add(new Result(time, site));
            try {
              barrier.await();
            } catch (BrokenBarrierException e) {
              return;
            } catch (InterruptedException e) {
              return;
            }
          }
        }
      }.start();
  }

  public static void main(String[] args) throws IOException {
    
    new MainClass().start(new String[]{"www.java2s.com","www.google.com"});
  }
}

class Result implements Comparable<Result> {
  Long time;

  String site;

  Result(Long time, String site) {
    this.time = time;
    this.site = site;
  }

  public int compareTo(Result r) {
    return time.compareTo(r.time);
  }
}
  
Home 
  Java Book 
    Thread Conncurrent  

CyclicBarrier:
  1. CyclicBarrier
  2. share a CyclicBarrier