Java ExecutorService 的生命周期可以分为以下几个阶段:
创建 ExecutorService: 通过使用 Executors 工厂方法或者直接实例化 ThreadPoolExecutor 类来创建一个 ExecutorService。例如:
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 或者
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
提交任务:
使用 ExecutorService 的 submit() 或 execute() 方法将任务提交给线程池。例如:
executorService.submit(() -> {
// 任务逻辑
});
任务执行: 线程池中的线程开始执行提交的任务。线程池会根据当前的任务数量和配置的线程池参数来决定如何分配线程来执行任务。
关闭 ExecutorService:
当不再需要 ExecutorService 时,应该关闭它以释放资源。可以通过调用 shutdown() 或 shutdownNow() 方法来关闭 ExecutorService。
shutdown():此方法会平滑地关闭 ExecutorService,不再接受新的任务,但会等待已经提交的任务执行完毕。executorService.shutdown();
shutdownNow():此方法会立即关闭 ExecutorService,尝试停止所有正在执行的任务,并返回尚未开始执行的任务列表。List<Runnable> remainingTasks = executorService.shutdownNow();
等待 ExecutorService 终止:
如果需要在关闭 ExecutorService 后等待所有任务执行完毕,可以调用 awaitTermination() 方法。例如:
boolean terminated = executorService.awaitTermination(60, TimeUnit.SECONDS);
此方法会阻塞,直到所有任务执行完毕或者超时发生。
总结一下,Java ExecutorService 的生命周期包括创建、提交任务、任务执行、关闭和等待终止这几个阶段。在使用 ExecutorService 时,务必确保在适当的时机关闭它,以避免资源泄漏。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。