home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / APCHSSL2.ZIP / OS2HTTPD / jserv / com / bitmechanic / util / Scheduler.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-02-02  |  2.2 KB  |  112 lines

  1. package com.bitmechanic.util;
  2.  
  3. import java.util.Vector;
  4.  
  5. public class Scheduler extends Thread implements Compare {
  6.    private static final long FOREVER = 99999999L;
  7.    private static final boolean debug = false;
  8.    private Vector jobs = new Vector();
  9.    private long nextCallback = 99999999L;
  10.  
  11.    public Scheduler() {
  12.       ((Thread)this).start();
  13.    }
  14.  
  15.    public void scheduleJob(Runnable var1, int var2) {
  16.       ScheduledJob var3 = new ScheduledJob(var1, var2);
  17.       this.jobs.addElement(var3);
  18.       this.resort();
  19.       ((Thread)this).interrupt();
  20.    }
  21.  
  22.    public void removeJob(Runnable var1) {
  23.       boolean var2 = false;
  24.       Vector var3 = this.jobs;
  25.       synchronized(var3){}
  26.  
  27.       try {
  28.          for(int var5 = 0; var5 < this.jobs.size() && !var2; ++var5) {
  29.             ScheduledJob var6 = (ScheduledJob)this.jobs.elementAt(var5);
  30.             if (var6.getJob() == var1) {
  31.                this.jobs.removeElementAt(var5);
  32.                var2 = true;
  33.             }
  34.          }
  35.  
  36.          if (var2) {
  37.             this.resort();
  38.          }
  39.       } catch (Throwable var8) {
  40.          throw var8;
  41.       }
  42.  
  43.    }
  44.  
  45.    public void run() {
  46.       while(true) {
  47.          if (this.nextCallback > 0L) {
  48.             try {
  49.                Thread.sleep(this.nextCallback);
  50.             } catch (InterruptedException var9) {
  51.             }
  52.          }
  53.  
  54.          Vector var1 = this.jobs;
  55.          synchronized(var1){}
  56.  
  57.          try {
  58.             if (this.jobs.size() > 0) {
  59.                boolean var3 = true;
  60.  
  61.                while(var3) {
  62.                   ScheduledJob var4 = (ScheduledJob)this.jobs.elementAt(0);
  63.                   long var5 = System.currentTimeMillis();
  64.                   if (var4.getNextCallback() <= var5) {
  65.                      this.runJob(var4, var5);
  66.                   } else {
  67.                      var3 = false;
  68.                   }
  69.                }
  70.  
  71.                ScheduledJob var11 = (ScheduledJob)this.jobs.elementAt(0);
  72.                this.nextCallback = var11.getNextCallback() - System.currentTimeMillis();
  73.             } else {
  74.                this.nextCallback = 99999999L;
  75.             }
  76.          } catch (Throwable var10) {
  77.             throw var10;
  78.          }
  79.       }
  80.    }
  81.  
  82.    private void runJob(ScheduledJob var1, long var2) {
  83.       Thread var4 = new Thread(var1.getJob());
  84.       var4.start();
  85.       var1.reset(var2);
  86.       this.resort();
  87.    }
  88.  
  89.    private void resort() {
  90.       Vector var1 = this.jobs;
  91.       synchronized(var1){}
  92.  
  93.       try {
  94.          ScheduledJob[] var3 = new ScheduledJob[this.jobs.size()];
  95.          this.jobs.copyInto(var3);
  96.          QuickSort.sort(var3, this);
  97.          this.jobs.removeAllElements();
  98.  
  99.          for(int var4 = 0; var4 < var3.length; ++var4) {
  100.             this.jobs.addElement(var3[var4]);
  101.          }
  102.       } catch (Throwable var6) {
  103.          throw var6;
  104.       }
  105.  
  106.    }
  107.  
  108.    public int compare(Object var1, Object var2) {
  109.       return (int)(((ScheduledJob)var1).getNextCallback() - ((ScheduledJob)var2).getNextCallback());
  110.    }
  111. }
  112.