|
|
- package net.jrtechs;
-
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Vector;
- import java.util.concurrent.*;
- import java.util.stream.Collectors;
-
- public class ThreadPoolExecutor<E> extends ParallelExecutor<E>
- {
- @Override
- public List<E> runTasks(Vector<Work<E>> tasks)
- {
- ExecutorService executor = Executors.newCachedThreadPool();
- List<Callable<E>> callables = new ArrayList<Callable<E>>();
- for(Work<E> work: tasks)
- {
- Callable<E> c = new Callable<E>() {
- @Override
- public E call() throws Exception {
- return work.runTask();
- }
- };
- callables.add(c);
- }
- List<E> results = new ArrayList<>();
- try
- {
- List<Future<E>> futures = executor.invokeAll(callables);
- for(Future<E> future: futures)
- {
- try {
- results.add(future.get());
- } catch (ExecutionException e) {
- e.printStackTrace();
- }
- }
- }
- catch (InterruptedException e)
- {
- e.printStackTrace();
- }
- return results;
- }
- }
|