コード例 #1
0
    final void test() throws Exception {
      Future[] futures = new Future[nthreads];
      for (int i = 0; i < nthreads; ++i) futures[i] = pool.submit(this);

      barrier.await();
      Thread.sleep(TIMEOUT);
      boolean tooLate = false;
      for (int i = 1; i < nthreads; ++i) {
        if (!futures[i].cancel(true)) tooLate = true;
        // Unbunch some of the cancels
        if ((i & 3) == 0) Thread.sleep(1 + rng.next() % 10);
      }

      Object f0 = futures[0].get();
      if (!tooLate) {
        for (int i = 1; i < nthreads; ++i) {
          if (!futures[i].isDone() || !futures[i].isCancelled())
            throw new Error("Only one thread should complete");
        }
      } else System.out.print("(cancelled too late) ");

      long endTime = System.nanoTime();
      long time = endTime - timer.startTime;
      if (print) {
        double secs = (double) (time) / 1000000000.0;
        System.out.println("\t " + secs + "s run time");
      }
    }
コード例 #2
0
ファイル: MapWordLoops.java プロジェクト: dmlloyd/jsr166
    int oneStep(int j) {
      int n = key.length;
      int r = rng.next() & 0x7FFFFFFF;
      int jinc = (r & 7);
      j += jinc - 3;
      if (j >= n) j -= n;
      if (j < 0) j += n;

      int l = n / 4 + j;
      if (l >= n) l -= n;

      String k = key[j];
      String x = map.get(k);

      if (x == null) {
        ++nagets;
        if (r < pctins) {
          map.put(k, key[l]);
          ++nputs;
          int csz = nputs - nremoves;
          if (csz > maxsz) maxsz = csz;
        }
      } else {
        if (k == x) ++npgets;
        if (r < pctrem) {
          map.remove(k);
          ++nremoves;
          j += ((r >>> 8) & 7) + n / 2;
          if (j >= n) j -= n;
        }
      }
      return j;
    }
コード例 #3
0
  static final class FutureLoop implements Callable {
    private int v = rng.next();
    private final ReentrantLock lock = new ReentrantLock();
    private final LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer();
    private final CyclicBarrier barrier;
    private final int nthreads;

    FutureLoop(int nthreads) {
      this.nthreads = nthreads;
      barrier = new CyclicBarrier(nthreads + 1, timer);
    }

    final void test() throws Exception {
      Future[] futures = new Future[nthreads];
      for (int i = 0; i < nthreads; ++i) futures[i] = pool.submit(this);

      barrier.await();
      Thread.sleep(TIMEOUT);
      boolean tooLate = false;
      for (int i = 1; i < nthreads; ++i) {
        if (!futures[i].cancel(true)) tooLate = true;
        // Unbunch some of the cancels
        if ((i & 3) == 0) Thread.sleep(1 + rng.next() % 10);
      }

      Object f0 = futures[0].get();
      if (!tooLate) {
        for (int i = 1; i < nthreads; ++i) {
          if (!futures[i].isDone() || !futures[i].isCancelled())
            throw new Error("Only one thread should complete");
        }
      } else System.out.print("(cancelled too late) ");

      long endTime = System.nanoTime();
      long time = endTime - timer.startTime;
      if (print) {
        double secs = (double) (time) / 1000000000.0;
        System.out.println("\t " + secs + "s run time");
      }
    }

    public final Object call() throws Exception {
      barrier.await();
      int sum = v;
      int x = 0;
      int n = ITERS;
      while (n-- > 0) {
        lock.lockInterruptibly();
        try {
          v = x = LoopHelpers.compute1(v);
        } finally {
          lock.unlock();
        }
        sum += LoopHelpers.compute2(LoopHelpers.compute2(x));
      }
      return new Integer(sum);
    }
  }
コード例 #4
0
ファイル: MapCheck.java プロジェクト: codehaus/jsr166-mirror
 static void randomWords(Object[] ws, int origin, int size) {
   for (int i = origin; i < size; ++i) {
     int k = 0;
     int len = 2 + (srng.next() & 0xf);
     char[] c = new char[len * 4 + 1];
     for (int j = 1; j < len; ++j) {
       int r = srng.next();
       c[k++] = (char) (' ' + (r & 0x7f));
       r >>>= 8;
       c[k++] = (char) (' ' + (r & 0x7f));
       r >>>= 8;
       c[k++] = (char) (' ' + (r & 0x7f));
       r >>>= 8;
       c[k++] = (char) (' ' + (r & 0x7f));
     }
     c[k++] = (char) ((i & 31) | 1); // never == to any testword
     ws[i] = new String(c);
   }
 }
コード例 #5
0
ファイル: MapCheck.java プロジェクト: codehaus/jsr166-mirror
 static void initInts(Object[] key, Object[] absent, int size) {
   for (int i = 0; i < size; ++i) key[i] = Integer.valueOf(i);
   Map m = newMap();
   int k = 0;
   while (k < size) {
     int r = srng.next();
     if (r < 0 || r >= size) {
       Integer ir = Integer.valueOf(r);
       if (m.put(ir, ir) == null) absent[k++] = ir;
     }
   }
 }