Java by API/java.util.concurrent/CyclicBarrier — различия между версиями

Материал из Java эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Версия 17:43, 31 мая 2010

CyclicBarrier: await()

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.jexp.ru","www.google.ru"});
  }
}
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.rupareTo(r.time);
  }
}





new CyclicBarrier(int parties, Runnable barrierAction)

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.jexp.ru","www.google.ru"});
  }
}
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.rupareTo(r.time);
  }
}