线程池的关闭方式有几种,各自的区别是什么? 您所在的位置:网站首页 等待线程池里的线程全部执行完任务 线程池的关闭方式有几种,各自的区别是什么?

线程池的关闭方式有几种,各自的区别是什么?

2023-06-30 03:39| 来源: 网络整理| 查看: 265

  在Java中,线程池的关闭方式有三种:shutdown()、shutdownNow()和awaitTermination()。

  1.'shutdown()'方法:

  ·该方法会平滑地关闭线程池,不再接受新的任务提交。

  ·它会等待所有已提交的任务执行完毕,包括已经在等待队列中的任务。

  ·如果线程池已经关闭,则调用该方法没有任何效果。

ExecutorService executor = Executors.newFixedThreadPool(5); // 执行任务... executor.shutdown(); // 关闭线程池 // 等待线程池中的任务执行完毕 try { executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); } catch (InterruptedException e) { // 处理中断异常 }   2.'shutdownNow()'方法:

  ·该方法会强制关闭线程池,尝试中断正在执行的任务,并返回等待执行的任务列表。

  ·它会立即停止线程池的运行,不再处理等待队列中的任务。

  ·如果线程池已经关闭,则调用该方法没有任何效果。

ExecutorService executor = Executors.newFixedThreadPool(5); // 执行任务... List unprocessedTasks = executor.shutdownNow(); // 强制关闭线程池 // 处理未执行的任务 for (Runnable task : unprocessedTasks) { // 处理未执行的任务... }   3.'awaitTermination()'方法:

  ·该方法用于等待线程池中的任务执行完毕,或者在指定的时间内等待任务执行完毕。

  ·它会阻塞当前线程,直到满足以下条件之一:所有任务执行完毕、超过指定的等待时间、当前线程被中断。

  这些关闭方式可以根据具体需求选择合适的方法,shutdown()和awaitTermination()提供了一种平滑关闭线程池的方式,而shutdownNow()则提供了一种立即停止线程池的方式。

ExecutorService executor = Executors.newFixedThreadPool(5); // 执行任务... executor.shutdown(); // 关闭线程池 // 等待线程池中的任务执行完毕,最多等待1小时 try { if (!executor.awaitTermination(1, TimeUnit.HOURS)) { // 执行超时处理 } } catch (InterruptedException e) { // 处理中断异常 }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有