当前位置: 首页 > news >正文

网站一级域名aspcms网站源码

网站一级域名,aspcms网站源码,学网页设计软件开发,大连网站排名系统Java 线程池中 shutdown 与 shutdownNow 的区别 核心行为差异 | 方法 | 行为描述 | |----------------|----------------------------------------------------------------------------| | shutdown | 平缓关闭线程池:1. 停止接受新任务。2. 已提交的任务&#xff…

Java 线程池中 shutdownshutdownNow 的区别


  1. 核心行为差异
    | 方法 | 行为描述 |
    |----------------|----------------------------------------------------------------------------|
    | shutdown | 平缓关闭线程池:
    1. 停止接受新任务。
    2. 已提交的任务(包括队列中的任务)会继续执行完成。 |
    | shutdownNow | 强制关闭线程池:
    1. 停止接受新任务。
    2. 尝试中断正在执行的任务。
    3. 清空任务队列,并返回未执行的任务列表。 |

  1. 线程中断机制
  • shutdown

    • 不中断任何线程,正在执行的任务会继续运行直到完成。
    • 适用于需要确保所有已提交任务完整执行的场景(如数据持久化)。
  • shutdownNow

    • 向所有工作线程发送中断信号(调用 Thread.interrupt())。
    • 任务是否终止取决于代码逻辑:
      • 若任务未检查中断状态(如未捕获 InterruptedException),可能无法终止。
      • 示例:一个循环任务中未调用 Thread.currentThread().isInterrupted(),即使调用 shutdownNow,任务仍会继续运行。

  1. 任务队列处理
    | 方法 | 队列处理 | 返回值 |
    |----------------|----------------------------------------------------------------------------|------------------------------|
    | shutdown | 继续执行队列中所有任务。 | 无返回值。 |
    | shutdownNow | 移除并丢弃队列中所有未执行的任务,返回这些任务的列表(List<Runnable>)。 | 返回未执行任务的列表。 |

  1. 线程池状态变化
  • shutdown

    • 将线程池状态从 RUNNING 改为 SHUTDOWN
    • 最终状态会过渡到 TERMINATED(需所有任务执行完毕)。
  • shutdownNow

    • 将线程池状态从 RUNNING 改为 STOP
    • 最终状态过渡到 TERMINATED(无论任务是否全部完成)。

  1. 适用场景
    | 方法 | 典型场景 |
    |----------------|----------------------------------------------------------------------------|
    | shutdown | 需要确保所有任务完整执行(如数据库批量写入、日志归档)。 |
    | shutdownNow | 紧急终止线程池(如服务宕机前快速释放资源,或处理死锁任务)。 |

实战建议

  1. 优雅关闭的最佳实践:

    • 先调用 shutdown,再通过 awaitTermination 等待任务完成。
    • 若超时未完成,再调用 shutdownNow 强制终止。
    executor.shutdown();
    try {if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {executor.shutdownNow(); // 超时后强制终止 }
    } catch (InterruptedException e) {executor.shutdownNow();
    }
    
  2. 任务代码的容错设计:

    • 在任务中定期检查中断状态,确保能响应 shutdownNow
    public void run() {while (!Thread.currentThread().isInterrupted()) {// 执行任务逻辑 }
    }
    
  3. 监控与日志:

    • 记录 shutdownNow 返回的未执行任务列表,用于故障恢复或重试。

扩展:源码级逻辑

  • shutdown
    • 仅修改线程池状态为 SHUTDOWN,后续执行完队列任务后触发 terminate()
  • shutdownNow
    • 修改状态为 STOP,中断所有工作线程,并清空队列。
    • 源码片段:
      public List<Runnable> shutdownNow() {List<Runnable> tasks;final ReentrantLock mainLock = this.mainLock;mainLock.lock();try {checkShutdownAccess();advanceRunState(STOP);  // 状态改为STOP interruptWorkers();     // 中断所有线程 tasks = drainQueue();   // 清空队列并返回未执行任务 } finally {mainLock.unlock();}tryTerminate();return tasks;
      }
      

总结

  • shutdown 是“礼貌告别”,确保任务善后。
  • shutdownNow 是“强制清场”,适合紧急场景,但依赖任务代码的健壮性。
  • 关键选择点:是否需要保留未执行任务?能否容忍任务中途终止?
http://www.yayakq.cn/news/931686/

相关文章:

  • 手机网站源码大全怎么看到网站开发时间
  • 中卫网站建设哪家好开发云app
  • 承德网站开发公司百度推广开户价格
  • 学校网站源码小程序商店官网
  • 南京小程序开发网站建设大连seo顾问
  • 建设 大型电子商务网站室内设计效果图排版
  • 员工怎么登录企业邮箱超级优化小说
  • 打开网站弹出一张图片 怎么做软件开发顺序
  • html5自适应网站源码手机网站 幻灯片js
  • 网站设计关键词查询爱站网
  • 潍坊营销型网站建设网站建设推广信息
  • 网站制作过程步骤加强网站建设
  • 四川圣泽建设集团有限公司网站网站须知
  • 网站建设的技术路线微博营销的特点有哪些
  • 网站关键词重要吗郑州系统开发
  • 低价网站建设推广优化网页上视频如何下载
  • 鞋子网站建设规划书品牌关键词优化
  • 类似红盟的网站怎么做成都购房登记入口官网
  • 网站seo诊断湖南岚鸿fifa17做任务网站
  • 网站 文件验证成全视频在线观看免费看
  • 公司做网站的费用属于什么费用网店美工培训教程
  • 苏州网站排名方案网站建设文化哪家好
  • 有哪些做的好看的网站吗上海工作
  • 保定网站制作专业网站建设+人员+年终总结
  • 网站开发 华景新城免费炫酷企业网站源码
  • 网站设置qq临时会话如何进行外贸网站建设
  • 西部虚拟主机网站后台不能访问软件开发与项目管理就业前景
  • 陕西网站开发联系电话更新不了wordpress
  • 教做月嫂的网站有吗购物网站seo搜索引擎优化方案
  • 阜城网站建设代理汽配网站建设