Useable Classes

TaskManager

This class responsible for process givin tasks in queue.
Use addTask() method to add task to queue
Use can spacify the number of concurent job by setMaxConcurentJob(integer)
package taskmanager;
public class TaskManagerimplements Runnable
{
  private java.util.Vector<TaskBase > queue= new java.util.Vector<TaskBase >();
  private int maxConcurrentJob = 1;
  private int currentJobNumber = 0;
  private boolean process = false;
  public TaskManager()
  {
  }
  /**
   *
   * @param maxConcurrentJob Number of concurrent tasks
   */
  public TaskManager(int maxConcurrentJob)
  {
    this.maxConcurrentJob = maxConcurrentJob;
  }
  public void startProcessingQuee()
  {
    if (!process)
    {
      process = true;
      Thread t = new Thread(this);
      t.setDaemon(true);
      t.start();
    }
  }
  public void stop()
  {
    process = false;
    queue.clear();
  }
  public void setMaxConcurentJob(int maxConcurentJob)
  {
    this.maxConcurrentJob = maxConcurentJob;
  }
  public void addTask(TaskBase ct)
  {
    ct.setTaskManager(this);
    queue.add(ct);
  }
  public void taskFinished(CacheTask ct)
  {
    currentJobNumber--;
  }
  @Override
  public void run()
  {
    while (process)
    {
      if (queue.size() > 0)
      {
        if (currentJobNumber < maxConcurrentJob)
        {
          currentJobNumber++;
          queue.get(0).start();
          queue.remove(0);
        }
      }
    }
  }
}


TaskBase

By inheriting this class you can define your custom task by overriding processTask() method.
For example: i used this class to cache smaller instance of image on hard disk in PicFX application.
package taskmanager;
import taskmanager.TaskManager;
public abstract class TaskBase implements Runnable
{
   private TaskManager taskManager;
   public void setTaskManager(TaskManagertaskManager)
   {
      this.taskManager= taskManager;
   }
   public void start()
   {
      Thread t = new Thread(this);
      t.setDaemon(true);
      t.start();
   }
   protected abstract void processTask();
   @Override
   public void run()
   {
       try
   {
    processTask();
   } finally
  {
      cacheManager.taskFinished(this);
   }
  }
}


No comments:

Post a Comment