关闭线程池的API介绍

        线程池关闭主要涉及以下几个API:

  • shutdown:关闭线程池,此方法执行后,线程池不会立即关闭,1、等待正在执行的线程任务执行完毕 2、等待任务队列中的任务执行完毕,步骤1和2执行后,线程池才完全中止
  • isShutdown:判断线程池是否是Shutdown状态,当shutdown方法执行后,isShutdown=true
  • isTerminated:判断线程池是否是Terminated状态,当线程池完全中止后,isTerminated=true
  • shutdownNow:立即关闭线程池,此方法执行后,1、将正在执行任务的线程中断 2、将任务队列中的任务返回

案例:shutdown

package com.gingko.test;import java.util.List;
import java.util.concurrent.*;public class Test {public static void main(String[] args) {ExecutorService executorService = Executors.newFixedThreadPool(10);for (int i=0;i<100;i++) {//提交100个任务executorService.submit(()->{try {Thread.sleep(500);System.out.println(Thread.currentThread().getName() + "执行任务了");} catch (InterruptedException e) {//e.printStackTrace();System.out.println(Thread.currentThread().getName() + "被中断了...");}});}/*** shutdown:关闭线程池,线程池状态调整为SHUTDOWN,线程池不会立即关闭* 1、等待正在执行的线程任务执行完毕* 2、等待任务队列中的任务执行完毕* 3、1-2执行完毕后,线程池才中止,状态调整为:TERMINATED*/executorService.shutdown();System.out.println("isShutdown:" + executorService.isShutdown());//trueSystem.out.println("isTerminated:" + executorService.isTerminated());//false//已经是SHUTDOWN状态,线程池无法接收新任务,抛出java.util.concurrent.RejectedExecutionExceptionexecutorService.submit(() -> {System.out.println(Thread.currentThread().getName());});}
}

从运行结果可以看出:

  • isShutdown返回是true
  • isTerminated由于线程池还未完全中止,返回false
  • 线程池关闭后,新的任务被拒绝 

案例:shutdownNow 

package com.gingko.test;import java.util.List;
import java.util.concurrent.*;public class Test {public static void main(String[] args) {ExecutorService executorService = Executors.newFixedThreadPool(10);for (int i=0;i<100;i++) {//提交100个任务executorService.submit(()->{try {Thread.sleep(500);System.out.println(Thread.currentThread().getName() + "执行任务了");} catch (InterruptedException e) {//e.printStackTrace();System.out.println(Thread.currentThread().getName() + "被中断了...");}});}/*** shutdownNow:立即关闭线程池,状态调整为:TERMINATED* 1、正在执行的线程,将其中断* 2、队列中任务,方法原封不动的返回*/List<Runnable> runnables = executorService.shutdownNow();System.out.println("isShutdown:" + executorService.isShutdown());//truetry {Thread.sleep(1500);System.out.println("isTerminated:" + executorService.isTerminated());//sleep了1.5秒,此时线程池已完全中止,true//总共100个任务,10个任务被10个线程获取并执行,但这10个线程在sleep的时候被中断了,剩余90个任务在任务队列中System.out.println("未执行的任务数:" + runnables.size());//90} catch (InterruptedException e) {e.printStackTrace();}}
}

从运行结果可以看出:

  • isShutdown返回是true
  • isTerminated 主线程等待了1.5秒,此时线程池已完全中止,返回true
  • 线程池关闭后,10个正在执行的线程被中断,剩余90个任务队列中的任务被返回 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/447881.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL学习笔记六:模式SCHEMA

模式&#xff08;Schema&#xff09; PostgreSQL中的模式&#xff08;Schema&#xff09;是一个命名的数据库对象集合&#xff0c;包括表、视图、索引、数据类型、函数、存储过程和操作符等。模式的主要作用是组织和命名空间数据库对象&#xff0c;使得同一个数据库中可以包含…

C/C++语言基础--C++异常看这一篇就够了

本专栏目的 更新C/C的基础语法&#xff0c;包括C的一些新特性 前言 通过前面几节课&#xff0c;我们学习了抽象、封装、继承、多态等相关的概念&#xff0c;接下来我们将讲解异常&#xff0c;异常是专门处理错误的&#xff1b;这一次加了不少图标&#xff0c;希望大家喜欢;C语…

牛客周赛 Round 63(构造、组合数、线性基)

文章目录 牛客周赛 Round 63(构造、组合数、线性基)A. 小红的好数B. 小红的好数组C. 小红的矩阵行走(简单思维题)D. 小红的行列式构造(构造、数学题)E. 小红的 red 计数(组合数)F. 小红开灯(线性基) 牛客周赛 Round 63(构造、组合数、线性基) A. 小红的好数 按照题意判断即可…

QT事件与网络通信

闹钟 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTimer> #include <QTextToSpeech> // 添加此行以引入QTextToSpeech类QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWin…

Python基础语法条件

注释 注释的作用 通过用自己熟悉的语言&#xff0c;在程序中对某些代码进行标注说明&#xff0c;这就是注释的作用&#xff0c;能够大大增强程序的可读性。 注释的分类及语法 注释分为两类&#xff1a;单行注释 和 多行注释。 单行注释 只能注释一行内容&#xff0c;语法如下…

基于springboot管理系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

B3622 枚举子集

1. 注意dfs内&#xff0c;for循环的遍历&#xff0c;想清楚把什么赋值给a[x] 2.本题只需要把0或1赋值给a[x]所以 #include<bits/stdc.h> using namespace std; int n; int a[20]; int vis[20]; void pr() {for (int i 1; i < n; i) {if (a[i] 0)cout << N;els…

Flink On kubernetes

Apache Flink 是一个分布式流处理引擎&#xff0c;它提供了丰富且易用的API来处理有状态的流处理应用&#xff0c;并且在支持容错的前提下&#xff0c;高效、大规模的运行此类应用。通过支持事件时间&#xff08;event-time&#xff09;、计算状态&#xff08;state&#xff09…

网络分析仪——提升网络性能的关键工具

目录 什么是网络分析仪&#xff1f; 1. 实时流量监控 2. 历史数据回溯分析 3. 网络性能关键指标监测 4. 可视化界面与报告生成 总结 在当今的数字化世界&#xff0c;网络的稳定性和性能直接影响企业的运营效率。网络拥堵、延迟和丢包等问题会导致用户体验的下降&#xff…

Linux常用功能整合

Linux Linux 前言一、常用操作以及概念 快捷键求助关机PATHsudo包管理工具发行版VIM 三个模式GNU开源协议 二、磁盘 磁盘接口磁盘的文件名 三、分区 分区表开机检测程序 四、文件系统 分区与文件系统组成文件读取磁盘碎片blockinode目录日志挂载目录配置 五、文件 文件属性文件…

银行卡基础信息查询 API 对接说明

本文将介绍一种 银行卡基础信息查询 API 对接说明&#xff0c;它可用于银行卡基础信息查询。 接下来介绍下 银行卡基础信息查询 API 的对接说明。 申请流程 要使用 API&#xff0c;需要先到 银行卡基础信息查询 API 对应页面申请对应的服务&#xff0c;进入页面之后&#xf…

服务器系统克隆技术

工作任务&#xff1a;克隆对象是Windows server2019 和2022的datacenter版本 条件&#xff1a;在已经完成安装的虚拟机上做克隆 图1-1 用两个服务器的母盘准备进行克隆 第一步&#xff1a;新建一个文件目录用于安放克隆好的服务器 图1-2 创建两个目录用于安放即将克隆好的服务…

Axure科技感元件:打造可视化大屏设计的得力助手

Axure&#xff0c;作为一款专业的原型设计工具&#xff0c;凭借其强大的设计功能、丰富的组件库和灵活的交互能力&#xff0c;成为了许多设计师打造科技感设计的首选工具。其中&#xff0c;Axure科技感元件更是以其独特的魅力和实用性&#xff0c;在数据可视化大屏、登录界面、…

python画图|在三维空间的不同平面上分别绘制不同类型二维图

【1】引言 前序已经完成了基础的二维图和三维图绘制教程探索&#xff0c;可直达的链接包括但不限于&#xff1a; python画图|3D参数化图形输出-CSDN博客 python画三角函数图|小白入门级教程_正余弦函数画图python-CSDN博客 在学习过程中&#xff0c;发现一个案例&#xff1…

【C】分支与循环2--while/for/do-while/goto以及break和continue在不同循环中的辨析~

分支与循环 while循环 if与while的对比 if(表达式)语句&#xff1b;while(表达式)语句&#xff1b;下面来看一个例子&#xff1a; 用 if 写&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {if (1)printf("hehe");//if后面条…

Java双亲委派机制讲解和常见问题解决案例示范

1. 引言 Java 的类加载机制是 JVM 运行时系统的核心之一&#xff0c;而其中的双亲委派机制&#xff08;Parent Delegation Model&#xff09;是保证 Java 平台安全性与可扩展性的关键设计。双亲委派机制确保了 Java 体系中类的加载顺序&#xff0c;防止了类的重复加载与覆盖&a…

ARP欺骗的多种手法

学习参考&#xff1a; ARP欺骗的各种d玩法-CSDN博客 https://juejin.cn/post/7383702153892954164 一、什么是ARP欺骗 1.什么是ARP&#xff1f; ARP (Address Resolution Protocol) 是一种网络层协议&#xff0c;用于将 IP 地址转换为物理地址&#xff08;MAC 地址&#xff0…

湖科大-计网真题笔记

09 序列号不涉及首部

前端开发笔记-- 黑马程序员4

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 css 三角写法用户界面鼠标样式取消表单轮廓vertical-align文本溢出 html5 新标签多媒体标签视频标签![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d85d…

深入解析 HashMap 的 remove() 方法及其相关实现

HashMap 是 Java 中最常用的集合类之一&#xff0c;它提供了高效的键值对存储和检索功能。本文将详细解析 HashMap 的 remove() 方法及其相关的内部实现&#xff0c;包括 removeNode() 和 removeTreeNode() 方法。通过这些方法&#xff0c;我们可以了解 HashMap 如何高效地移除…