Я использовал shutdownNow, чтобы завершить процессы сразу после того, как первый процесс выдаст некоторый вывод из метода invokeAny. Но в выводе я вижу, что даже после вызова shutDownNow () процессы находятся в процессе завершения и завершают свою работу и только после этого завершают работу. Код:
int numberOfRecordsInsertedSuccessfully = 0;
List<String> userRecordList = readFile(
"C:\\Users\\sonar\\git\\MultiThreading-Cocurrency\\JavaSEConcurrencyAPIStudyProject\\src\\main\\java\\Resources\\ExecutorServiceUserFile.txt");
// ExecutorService executorService = Executors.newSingleThreadExecutor(); //Thread pool of single thread.
// ExecutorService executorService = Executors.newFixedThreadPool(3); //Thread pool size is 3 here
ExecutorService executorService = Executors.newCachedThreadPool();
UserDao userDao = new UserDao();
List<Callable<Integer>> listOfCallable= new ArrayList<>();
userRecordList.forEach(x -> listOfCallable.add(new UserProcessor(x, userDao)));
try {
Integer future = executorService.invokeAny(listOfCallable);
System.out.println(future);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
System.out.println(executorService.shutdownNow());
System.out.println("ExecutorService is shutting down " + executorService.isShutdown()); //After getting first future result this statement will be executed.
System.out.println("ExecutorService is Terminated " + executorService.isTerminated());
Вывод на консоль:
Более подробную информацию о коде см. Выше git ссылка с
Класс: ExecutorServiceThreeTypesOfShutDownMethodMainClass
пакет: com.Concurrency.JavaSEConcurrencyAPIStudyProject.HighLevelApis.ExecutorServiceInterface
1014 * * * 234 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. проект для более подробной информации
Пожалуйста, помогите, почему это происходит? как я могу решить эту проблему?