156 |
|
* for execution |
157 |
|
*/ |
158 |
|
public static <T> Future<T> execute(Executor executor, Runnable task, T value) { |
159 |
< |
FutureTask<T> ftask; |
160 |
< |
if (executor instanceof ThreadPoolExecutor) { |
161 |
< |
ftask = new ThreadPoolFutureTask<T>( |
162 |
< |
(ThreadPoolExecutor) executor, task, value); |
163 |
< |
} else { |
164 |
< |
ftask = new FutureTask<T>(task, value); |
165 |
< |
} |
159 |
> |
FutureTask<T> ftask = new FutureTask<T>(task, value); |
160 |
|
executor.execute(ftask); |
161 |
|
return ftask; |
162 |
|
} |
172 |
|
* for execution |
173 |
|
*/ |
174 |
|
public static <T> FutureTask<T> execute(Executor executor, Callable<T> task) { |
175 |
< |
FutureTask<T> ftask; |
182 |
< |
if (executor instanceof ThreadPoolExecutor) { |
183 |
< |
ftask = new ThreadPoolFutureTask<T>( |
184 |
< |
(ThreadPoolExecutor) executor, task); |
185 |
< |
} else { |
186 |
< |
ftask = new FutureTask<T>(task); |
187 |
< |
} |
175 |
> |
FutureTask<T> ftask = new FutureTask<T>(task); |
176 |
|
executor.execute(ftask); |
177 |
|
return ftask; |
178 |
|
} |
210 |
|
return ftask.get(); |
211 |
|
} |
212 |
|
|
225 |
– |
private static class ThreadPoolFutureTask<V> extends FutureTask<V> { |
226 |
– |
|
227 |
– |
ThreadPoolFutureTask(ThreadPoolExecutor tpe, Callable<V> callable) { |
228 |
– |
super(callable); |
229 |
– |
this.tpe = tpe; |
230 |
– |
} |
231 |
– |
|
232 |
– |
ThreadPoolFutureTask(ThreadPoolExecutor tpe, Runnable runnable, V result) { |
233 |
– |
super(runnable, result); |
234 |
– |
this.tpe = tpe; |
235 |
– |
} |
236 |
– |
|
237 |
– |
public boolean cancel(boolean mayInterruptIfRunning) { |
238 |
– |
tpe.remove(this); // ignore success/failure |
239 |
– |
return super.cancel(mayInterruptIfRunning); |
240 |
– |
} |
241 |
– |
|
242 |
– |
private final ThreadPoolExecutor tpe; |
243 |
– |
} |
213 |
|
} |