KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > snow > concurrent > TaskManager


1 package snow.concurrent;
2
3 import java.util.concurrent.*;
4 import java.util.*;
5
6 /** an easy task manager fifo single threaded queue.
7 */

8 public class TaskManager
9 {
10   // only one task at time, one after each other
11
final private ExecutorService executor = Executors.newFixedThreadPool(1);
12   final private Vector<InterruptableTask> submitedTasks = new Vector<InterruptableTask>(); // all the tasks maybe actual, past and futures
13

14   public TaskManager()
15   {
16
17   } // Constructor
18

19
20   public <T> Future execute(InterruptableTask<T> task)
21   {
22      Future fut = executor.submit((Callable<T>) task);
23      task.future = fut;
24      submitedTasks.add(task);
25      cleanDoneTasks();
26      return fut;
27   }
28
29
30   public void stopActualTask(long timeout)
31   {
32      synchronized(submitedTasks)
33      {
34         if(submitedTasks.size()==0) return;
35
36         cleanDoneTasks();
37         InterruptableTask at = getActualExecutedTask();
38         if(at!=null)
39         {
40           if(at.interrupter.shouldStopEvaluation())
41           {
42             System.out.println("kill task");
43             at.kill();
44           }
45           else
46           {
47             System.out.println("Request stop");
48             at.requestStop();
49           }
50         }
51      }
52   }
53
54   private void cleanDoneTasks()
55   {
56      synchronized(submitedTasks)
57      {
58         for(int i=submitedTasks.size()-1; i>=0; i--)
59         {
60           if(submitedTasks.elementAt(i).future.isDone())
61           {
62             submitedTasks.removeElementAt(i);
63           }
64         }
65      }
66   }
67
68   public InterruptableTask getActualExecutedTask()
69   {
70      synchronized(submitedTasks)
71      {
72         for(int i=0; i<submitedTasks.size(); i++)
73         {
74           if(submitedTasks.elementAt(i).isExecuting())
75           {
76             return submitedTasks.elementAt(i);
77           }
78         }
79      }
80      return null;
81   }
82
83 } // TaskManager
Popular Tags