shutdown and awaitTermination which first call have any difference?

前端 未结 9 1202
渐次进展
渐次进展 2020-12-12 14:44

What is the difference between

ExecutorService eService = Executors.newFixedThreadPool(2);
eService.execute(new TestThread6());
eService.execute(new TestThre         


        
9条回答
  •  情歌与酒
    2020-12-12 14:56

    shutdown means the executor service takes no more incoming tasks.

    awaitTermination is invoked after a shutdown request.

    You need to first shut down the service and then block and wait for threads to finish.

    If you want to see all threads finish running and insist on using awaiTermination, you need to set the timeout parameter to be big enough. So you could do:

    eService.shutdown();
    if (!eService.awaitTermination(60000, TimeUnit.SECONDS))
        System.err.println("Threads didn't finish in 60000 seconds!");
    }
    

    Alternatively, you could do:

    eService.shutdown();
    while (!eService.isTerminated()) {
    
    }
    

    This way you are able to ensure all threads are finished running unless they are interrupted unexpectedly.

提交回复
热议问题