1 package snow.concurrent; 2 3 import java.util.concurrent.*; 4 import java.util.*; 5 6 8 public class TaskManager 9 { 10 final private ExecutorService executor = Executors.newFixedThreadPool(1); 12 final private Vector<InterruptableTask> submitedTasks = new Vector<InterruptableTask>(); 14 public TaskManager() 15 { 16 17 } 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 } | Popular Tags |