//: net/mindview/util/TaskManager.java // Managing and executing a queue of tasks. package net.mindview.util; import java.util.concurrent.*; import java.util.*; public class TaskManager> extends ArrayList> { private ExecutorService exec = Executors.newSingleThreadExecutor(); public void add(C task) { add(new TaskItem(exec.submit(task),task)); } public List getResults() { Iterator> items = iterator(); List results = new ArrayList(); while(items.hasNext()) { TaskItem item = items.next(); if(item.future.isDone()) { try { results.add(item.future.get()); } catch(Exception e) { throw new RuntimeException(e); } items.remove(); } } return results; } public List purge() { Iterator> items = iterator(); List results = new ArrayList(); while(items.hasNext()) { TaskItem item = items.next(); // Leave completed tasks for results reporting: if(!item.future.isDone()) { results.add("Cancelling " + item.task); item.future.cancel(true); // May interrupt items.remove(); } } return results; } } ///:~