Mega Code Archive

 
Categories / Java by API / Java Util Concurrent
 

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.rntsoft.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);   } }