コード例 #1
0
ファイル: GMS.java プロジェクト: jtoerber/JGroups
    public void run() {
      long end_time, wait_time;
      List<Request> requests = new LinkedList<Request>();
      while (Thread.currentThread().equals(thread) && !suspended) {
        try {
          boolean keepGoing = false;
          end_time = System.currentTimeMillis() + max_bundling_time;
          do {
            Request firstRequest =
                (Request)
                    queue.remove(INTERVAL); // throws a TimeoutException if it runs into timeout
            requests.add(firstRequest);
            if (!view_bundling) break;
            if (queue.size() > 0) {
              Request nextReq = (Request) queue.peek();
              keepGoing = view_bundling && firstRequest.canBeProcessedTogether(nextReq);
            } else {
              wait_time = end_time - System.currentTimeMillis();
              if (wait_time > 0)
                queue.waitUntilClosed(
                    wait_time); // misnomer: waits until element has been added or q closed
              keepGoing =
                  queue.size() > 0 && firstRequest.canBeProcessedTogether((Request) queue.peek());
            }
          } while (keepGoing && System.currentTimeMillis() < end_time);

          try {
            process(requests);
          } finally {
            requests.clear();
          }
        } catch (QueueClosedException e) {
          break;
        } catch (TimeoutException e) {
          break;
        } catch (Throwable catchall) {
          Util.sleep(50);
        }
      }
    }
コード例 #2
0
ファイル: GMS.java プロジェクト: jtoerber/JGroups
 synchronized void add(Request req) {
   if (suspended) {
     if (log.isTraceEnabled())
       log.trace(local_addr + ": queue is suspended; request " + req + " is discarded");
     return;
   }
   start();
   try {
     queue.add(req);
     history.add(new Date() + ": " + req.toString());
   } catch (QueueClosedException e) {
     if (log.isTraceEnabled()) log.trace("queue is closed; request " + req + " is discarded");
   }
 }