• ExecutorService对象的shutdown()和shutdownNow()的区别


    可以关闭 ExecutorService,这将导致其拒绝新任务。提供两个方法来关闭 ExecutorService。

    shutdown() 方法在终止前允许执行以前提交的任务;

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

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

    void shutdownAndAwaitTermination(ExecutorService pool) {  
      pool.shutdown(); // Disable new tasks from being submitted  
      try {  
        // Wait a while for existing tasks to terminate  
        if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {  
          pool.shutdownNow(); // Cancel currently executing tasks  
          // Wait a while for tasks to respond to being cancelled  
          if (!pool.awaitTermination(60, TimeUnit.SECONDS))  
              System.err.println("Pool did not terminate");  
        }  
      } catch (InterruptedException ie) {  
        // (Re-)Cancel if current thread also interrupted  
        pool.shutdownNow();  
        // Preserve interrupt status  
        Thread.currentThread().interrupt();  
      }  
    }  

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

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

  • 相关阅读:
    声律启蒙(上 下卷,珍藏版)
    笠翁对韵(全卷,珍藏版附注释)
    Oracle 中 nvl、nvl2、nullif、coalesce、decode 函数的用法详解
    Groovy
    spring各版本jar包和源码
    Java 调用翻译软件实现英文文档翻译
    oracle导出序列的几种办法
    Oracle数据库内存使用情况分析查看
    window Maven私服搭建——nexus
    用户管理的备份与恢复
  • 原文地址:https://www.cnblogs.com/liaojie970/p/8079499.html
Copyright © 2020-2023  润新知