82 |
|
/** |
83 |
|
* FutureTask extension to enqueue upon completion |
84 |
|
*/ |
85 |
< |
private class QueueingFuture extends FutureTask<Void> { |
86 |
< |
QueueingFuture(RunnableFuture<V> task) { |
85 |
> |
private static class QueueingFuture<V> extends FutureTask<Void> { |
86 |
> |
QueueingFuture(RunnableFuture<V> task, |
87 |
> |
BlockingQueue<Future<V>> completionQueue) { |
88 |
|
super(task, null); |
89 |
|
this.task = task; |
90 |
+ |
this.completionQueue = completionQueue; |
91 |
|
} |
90 |
– |
protected void done() { completionQueue.add(task); } |
92 |
|
private final Future<V> task; |
93 |
+ |
private final BlockingQueue<Future<V>> completionQueue; |
94 |
+ |
protected void done() { completionQueue.add(task); } |
95 |
|
} |
96 |
|
|
97 |
|
private RunnableFuture<V> newTaskFor(Callable<V> task) { |
151 |
|
public Future<V> submit(Callable<V> task) { |
152 |
|
if (task == null) throw new NullPointerException(); |
153 |
|
RunnableFuture<V> f = newTaskFor(task); |
154 |
< |
executor.execute(new QueueingFuture(f)); |
154 |
> |
executor.execute(new QueueingFuture<V>(f, completionQueue)); |
155 |
|
return f; |
156 |
|
} |
157 |
|
|
158 |
|
public Future<V> submit(Runnable task, V result) { |
159 |
|
if (task == null) throw new NullPointerException(); |
160 |
|
RunnableFuture<V> f = newTaskFor(task, result); |
161 |
< |
executor.execute(new QueueingFuture(f)); |
161 |
> |
executor.execute(new QueueingFuture<V>(f, completionQueue)); |
162 |
|
return f; |
163 |
|
} |
164 |
|
|