zoukankan      html  css  js  c++  java
  • ExecutorService对象的shutdown()和shutdownNow()的区别

    可以关闭 ExecutorService,这将导致其拒绝新任务。提供两个方法来关闭 ExecutorService。shutdown() 方法在终止前允许执行以前提交的任务,而 shutdownNow() 方法阻止等待任务启动并试图停止当前正在执行的任务。在终止时,执行程序没有任务在执行,也没有任务在等待执行,并且无法提交新任务。应该关闭未使用的 ExecutorService 以允许回收其资源。 

    下列方法分两个阶段关闭 ExecutorService。第一阶段调用 shutdown 拒绝传入任务,然后调用 shutdownNow(如有必要)取消所有遗留的任务: 

     1  void shutdownAndAwaitTermination(ExecutorService pool) {
     2    pool.shutdown(); // Disable new tasks from being submitted
     3    try {
     4      // Wait a while for existing tasks to terminate
     5      if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
     6        pool.shutdownNow(); // Cancel currently executing tasks
     7        // Wait a while for tasks to respond to being cancelled
     8        if (!pool.awaitTermination(60, TimeUnit.SECONDS))
     9            System.err.println("Pool did not terminate");
    10      }
    11    } catch (InterruptedException ie) {
    12      // (Re-)Cancel if current thread also interrupted
    13      pool.shutdownNow();
    14      // Preserve interrupt status
    15      Thread.currentThread().interrupt();
    16    }
    17  }

    shutdown调用后,不可以再submit新的task,已经submit的将继续执行。

    shutdownNow试图停止当前正执行的task,并返回尚未执行的task的list

  • 相关阅读:
    大型网站架构系列——分布式消息队列
    docker 搭建lnmp环境以及docker常用命令
    编译PHP扩展amqp & php消息队列 rabbitmq
    python @staticmethod和@classmethod的作用
    Sqlalchemy model 文件自动生成
    正则表达式–零宽断言-赵兴壮
    php 编码规范
    MySQL8.0 InnoDB并行执行
    MySQL8.0 新特性 Hash Join
    MySQL8.0 redo日志系统优化
  • 原文地址:https://www.cnblogs.com/yuandluck/p/9511515.html
Copyright © 2011-2022 走看看