FileDocCategorySizeDatePackage
DelayedTask.javaAPI DocExample1719Mon Nov 13 15:18:32 GMT 2006collections

DelayedTask.java

package collections;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.Delayed;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.BlockingQueue;
import java.util.Set;
import java.util.HashSet;
import static collections.StaticTestData.*;

public class DelayedTask implements Delayed {
  public final static long MILLISECONDS_IN_DAY = 60 * 60 * 24 * 1000;
  private long endTime;     // in milliseconds after January 1, 1970
  private Task task;
  DelayedTask(Task t, int daysDelay) {
    endTime = System.currentTimeMillis() + daysDelay * MILLISECONDS_IN_DAY;
    task = t;
  }
  public long getDelay(TimeUnit unit) {
    long remainingTime = endTime - System.currentTimeMillis();
    return unit.convert(remainingTime, TimeUnit.MILLISECONDS);
  }
  public int compareTo(Delayed t) {
    long thisDelay = getDelay(TimeUnit.MILLISECONDS);
    long otherDelay = t.getDelay(TimeUnit.MILLISECONDS);
    return (thisDelay < otherDelay) ? -1 : (thisDelay > otherDelay) ? 1 : 0;
  }
  Task getTask() { return task; }
  public static void main(String[] args) {
    BlockingQueue<DelayedTask> reminderQueue = new DelayQueue<DelayedTask>();
    reminderQueue.offer(new DelayedTask (databaseCode, 1));
    reminderQueue.offer(new DelayedTask (interfaceCode, 2));

    // now get the first reminder task that is ready to be processed
    DelayedTask t1 = reminderQueue.poll();
    if (t1 == null) {
      // no reminders ready yet
    } else {
      // process t1
    }
    Set<DelayedTask> delayedTaskSet1 = new HashSet<DelayedTask>();
    delayedTaskSet1.addAll(reminderQueue);
    Set<DelayedTask> delayedTaskSet2 = new HashSet<DelayedTask>();
    reminderQueue.drainTo(delayedTaskSet2);

  }
}