An ExecutorService should be shut down once it is no longer needed to free up system resources and to allow graceful application shutdown . Because the threads in an ExecutorService may be nondaemon threads, they may prevent normal application termination.