У меня есть требование, чтобы основной поток и служба Executor выполнялись параллельно.Основной поток не должен ждать завершения всех потоков в службе исполнителя.Он должен продолжить выполнение, пока служба-исполнитель выполняет свои потоки.Пример Основной метод
public static void main(String[] args) throws InterruptedException, ExecutionException {
String mess = "test completed";
//Start of ExecutorService - ThreadPool of size 500
ExecutorService executorService = Executors.newFixedThreadPool(500);
//Creating 500 tasks to execute
List<AsyncTask> callables = new ArrayList<>();
for(int i=1 ; i<= 500 ; i++){
callables.add(new AsyncTask(i));
}
//Submitting all 500 tasks to execute
List<Future<String>> futures = executorService.invokeAll(callables);
for(Future<String> future : futures){
System.out.println("future.get = " + future.get());
}
executorService.shutdown();
//End of Executor service
//Below code executes only when executor service is finished.
//I want below code to execute in parallel with executor service
//Means It should print this mess before executor service finishes
System.out.println(mess);
}
Вызываемое задание
public class AsyncTask implements Callable<String>{
private int i;
public AsyncTask(int i) {
this.i = i;
}
@Override
public String call() throws Exception {
return "Task " +i;
}
}
OutPut:
future.get = Task 1
future.get = Task 2
future.get = Task 3
future.get = Task 4
.......continues till
future.get = Task 500
test completed
Ожидаемый вывод:
проверка завершенного сообщения, которое будет напечатано во времянекоторые асинхронные задачи завершены или перед запуском асинхронных задач
Пример вывода
future.get = Task 1
future.get = Task 2
test completed // Both Main method and Executor service is running in parallel
future.get = Task 3
...........
future.get = Task 500
Я раньше не работал с потоками, я что-то пропустил?Вся идея использования сервиса executor состоит в том, чтобы выполнять некоторые задачи параллельно с основным потоком, верно?Пожалуйста, предложите мне исправить это