OnJava8-Examples/net/mindview/util/TaskManager.java

45 lines
1.2 KiB
Java
Raw Normal View History

2015-04-20 15:36:01 -07:00
//: 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<R,C extends Callable<R>>
extends ArrayList<TaskItem<R,C>> {
private ExecutorService exec =
Executors.newSingleThreadExecutor();
public void add(C task) {
2015-05-05 11:20:13 -07:00
add(new TaskItem<>(exec.submit(task),task));
2015-04-20 15:36:01 -07:00
}
public List<R> getResults() {
Iterator<TaskItem<R,C>> items = iterator();
2015-05-05 11:20:13 -07:00
List<R> results = new ArrayList<>();
2015-04-20 15:36:01 -07:00
while(items.hasNext()) {
TaskItem<R,C> 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<String> purge() {
Iterator<TaskItem<R,C>> items = iterator();
2015-05-05 11:20:13 -07:00
List<String> results = new ArrayList<>();
2015-04-20 15:36:01 -07:00
while(items.hasNext()) {
TaskItem<R,C> item = items.next();
// Leave completed tasks for results reporting:
if(!item.future.isDone()) {
results.add("Cancelling " + item.task);
item.future.cancel(true); // Can interrupt
2015-04-20 15:36:01 -07:00
items.remove();
}
}
return results;
}
2015-05-05 11:20:13 -07:00
} ///:~