我已经使用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());


控制台上的输出为:
java - 来自executorService界面的ShutdownNow不会关闭正在执行的任务-LMLPHP

有关代码的更多详细信息,请参考上面的git链接,

类别:ExecutorServiceThreeTypesOfShutDownMethodMainClass

软件包:com.Concurrency.JavaSEConcurrencyAPIStudyProject.HighLevelApis.ExecutorServiceInterface

要使用的项目:JavaSEConcurrencyAPIStudyProject

git链接:Git link for project for more details

请帮忙,为什么会这样?我该如何解决这个问题?

最佳答案

该方法的Javadoc表示以下内容:

除了尽最大努力阻止停止处理正在执行的任务之外,没有任何保证。例如,典型的实现将通过Thread.interrupt()取消,因此任何无法响应中断的任务都可能永远不会终止。

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html

因此,如果您的任务不检查中断的标志并捕获并忽略InterruptedException,则shutdownNow()将无法停止它们

关于java - 来自executorService界面的ShutdownNow不会关闭正在执行的任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61308952/

10-10 22:32