Я хотел бы получить результат от каждой вызываемой задачи, которая уже отправлена в пул.
Eg:
У меня есть 5 вызываемых задач, каждая задача ждет 5 секунд
Я отправил задачу 5callable в фиксированный пул потоков 5
Должен ли я получать уведомление, если 2-я вызываемая задача завершает свою работу?
public class MyCallable implements Callable<Result> { Result result =null; public MyCallable(int id, String name) { result=new Result(id, name); }; @Override public Result call() throws Exception { Thread.sleep(5000); return result; } public static void main(String args[]){ ExecutorService executor = Executors.newFixedThreadPool(10); List<Future<Result>> list = new ArrayList<Future<Result>>(); Callable<Result> callable = null; for(int i=0; i< 10; i++){ callable = new MyCallable( i, "t"+i); Future<Result> future = executor.submit(callable); list.add(future); } for(Future<Result> fut : list){ try { Result res = fut.get(); System.out.println(new Date()+" Thread name "+res.getName() +" ID "+res.getId()); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } executor.shutdown(); } } class Result { int id; String name; public int getId() { return id; } public String getName() { return name; } public Result(int id, String name) { super(); this.id = id; this.name = name; } }
В приведенном выше примере метод future.get будет вызываться после обработки 5 потоков службой excutor.