home *** CD-ROM | disk | FTP | other *** search
- package com.bitmechanic.util;
-
- import java.util.Vector;
-
- public class Scheduler extends Thread implements Compare {
- private static final long FOREVER = 99999999L;
- private static final boolean debug = false;
- private Vector jobs = new Vector();
- private long nextCallback = 99999999L;
-
- public Scheduler() {
- ((Thread)this).start();
- }
-
- public void scheduleJob(Runnable var1, int var2) {
- ScheduledJob var3 = new ScheduledJob(var1, var2);
- this.jobs.addElement(var3);
- this.resort();
- ((Thread)this).interrupt();
- }
-
- public void removeJob(Runnable var1) {
- boolean var2 = false;
- Vector var3 = this.jobs;
- synchronized(var3){}
-
- try {
- for(int var5 = 0; var5 < this.jobs.size() && !var2; ++var5) {
- ScheduledJob var6 = (ScheduledJob)this.jobs.elementAt(var5);
- if (var6.getJob() == var1) {
- this.jobs.removeElementAt(var5);
- var2 = true;
- }
- }
-
- if (var2) {
- this.resort();
- }
- } catch (Throwable var8) {
- throw var8;
- }
-
- }
-
- public void run() {
- while(true) {
- if (this.nextCallback > 0L) {
- try {
- Thread.sleep(this.nextCallback);
- } catch (InterruptedException var9) {
- }
- }
-
- Vector var1 = this.jobs;
- synchronized(var1){}
-
- try {
- if (this.jobs.size() > 0) {
- boolean var3 = true;
-
- while(var3) {
- ScheduledJob var4 = (ScheduledJob)this.jobs.elementAt(0);
- long var5 = System.currentTimeMillis();
- if (var4.getNextCallback() <= var5) {
- this.runJob(var4, var5);
- } else {
- var3 = false;
- }
- }
-
- ScheduledJob var11 = (ScheduledJob)this.jobs.elementAt(0);
- this.nextCallback = var11.getNextCallback() - System.currentTimeMillis();
- } else {
- this.nextCallback = 99999999L;
- }
- } catch (Throwable var10) {
- throw var10;
- }
- }
- }
-
- private void runJob(ScheduledJob var1, long var2) {
- Thread var4 = new Thread(var1.getJob());
- var4.start();
- var1.reset(var2);
- this.resort();
- }
-
- private void resort() {
- Vector var1 = this.jobs;
- synchronized(var1){}
-
- try {
- ScheduledJob[] var3 = new ScheduledJob[this.jobs.size()];
- this.jobs.copyInto(var3);
- QuickSort.sort(var3, this);
- this.jobs.removeAllElements();
-
- for(int var4 = 0; var4 < var3.length; ++var4) {
- this.jobs.addElement(var3[var4]);
- }
- } catch (Throwable var6) {
- throw var6;
- }
-
- }
-
- public int compare(Object var1, Object var2) {
- return (int)(((ScheduledJob)var1).getNextCallback() - ((ScheduledJob)var2).getNextCallback());
- }
- }
-