说明:

(1)介绍与停止线程池相关的五个方法:shutdown(),isShutdown(),isTerminated(),awaitTermination(),shutdownNow();

目录

一:与停止线程池,相关的五个方法;

1.shutdown方法:关闭线程;

(1)shutdown方法,简述;

(2)shutdown方法,演示;

2.isShutdown方法:查看线程池是否已进入停止状态了;

3.isTerminated方法:查看线程池是否已经彻底停止了;

4.awaitTermination方法:判断在等待的时间内,线程池是否彻底停止;

5.shutdownNow方法:无论线程池中是否有剩余任务,立刻彻底停止线程池;


一:与停止线程池,相关的五个方法;

1.shutdown方法:关闭线程;

(1)shutdown方法,简述;

(1)shutdown方法是关闭线程池;

(2)但是,执行完这个方法后,线程池不一定会立即停止;

● 这是因为,shutdown只是初始化整个关闭过程;

● 比如,线程池在执行到一半时,线程中有正在执行的任务,队列中也可能有等待被执行的任务;所以,不是我们调用shutdown方法后,整个线程池就能停的;

● 在我们调用了shutdown方法后,线程池就知道了【我们想要停止线程池的意图】;这个时候,为了安全起见,线程池会把正在执行的任务及队列中等待执行的任务都执行完毕后,再去关闭;

● 自然,在我们调用了shutdown方法后,如果还有新的任务过来,线程池就会拒绝;


(2)shutdown方法,演示;

package threadPool;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/*** 演示关闭线程池的shutdown方法;*/
public class ShutDown {public static void main(String[] args) throws InterruptedException {ExecutorService executorService = Executors.newFixedThreadPool(10);for (int i = 0; i <1000 ; i++) {executorService.execute(new ShutDownTask());}Thread.sleep(1500);executorService.shutdown();executorService.execute(new ShutDownTask());}
}class ShutDownTask implements Runnable{@Overridepublic void run() {try {Thread.sleep(500);System.out.println(Thread.currentThread().getName());} catch (InterruptedException e) {e.printStackTrace();}}
}

说明:

(1)逻辑说明;

(2)运行效果;

(3)但是,我们调用shutdown方法关闭线程后,如果线程无法立即关闭;难道,我们只有通过【向线程池添加任务的方式】才能看到shutdown确确实实被执行了吗?:显然不,下面将要介绍的isShutdown方法,可以实现这个需求;

2.isShutdown方法:查看线程池是否已进入停止状态了;

如果,我们执行了shutdown方法,isShutdown方法就会返回true;

说明:

(1)还是强调一下:我们执行了shutdown方法,isShutdown方法就会返回true;isShutdown方法返回true,仅仅代表线程池处于停止状态了,不代表线程池彻底停止了(因为,线程池进入停止状态后,还要等待【正在执行的任务以及队列中等待的任务】都执行完后,才能彻底终止);

(2)那么怎么看,线程池是否彻底停止了呐?:下面要讲的isTerminated()方法,可以实现这个需求;

3.isTerminated方法:查看线程池是否已经彻底停止了;

……………………………………………………

4.awaitTermination方法:判断在等待的时间内,线程池是否彻底停止;

(1)这个方法,仅仅是用来检测,在设置的等待时间内,线程池是否彻底停止了;

(2)【awaitTermination方法,能否可以去调用】和【有没有调用shutdown】没有关系;换句话说,我们无论有没有执行shutdown,都可以调用awaitTermination;

……………………………………………………

5.shutdownNow方法:无论线程池中是否有剩余任务,立刻彻底停止线程池;

(1)那么,此时正在执行任务的线程会被中断;队列中正在排队的任务,会返回;

……………………………………………………

运行结果:

​​​​​​​

线程池5:与停止线程池,相关的五个方法;(shutdown(),isShutdown(),isTerminated(),awaitTermination(),shutdownNow();)相关推荐

  1. java 线程强制停止线程_java多线程之停止线程

    在多线程开发中停止线程是非常重要的技术点. 停止线程在Java语言中并不像break语句那样干脆.须要一些技巧性的处理. 一.  异常法 採用异常法来停止一个线程.首先我们须要了解一下两个方法的使用方 ...

  2. 【Java 语言】Java 多线程 一 ( 线程基础 : 线程启动 | 线程停止 | 线程暂停 | 线程优先级 | 守护线程)

    一. 线程启动 线程启动 : -- 1. 继承 Thread 运行线程 : 重写 Thread 类的 run 方法, 然后执行该线程; -- 2. 实现 Runnable 接口, 并运行线程; -- ...

  3. 停止线程 暂停线程

    停止线程 停止一个线程意味着在线程处理完任务之前停止正在进行的操作,即放弃当前的操作. Java中有以下3中方法可以终止正在运行的线程: 使用退出标志,使线程正常退出(当run方法完成后线程终止) 使 ...

  4. java 中如何正确的停止线程

    如何优雅的停止一个线程 1.为什么要停止线程 2.为何说要正确的停止线程 3.使用interrupt()停止线程 4.线程在通常三种情况下停止 4.1 普通情况 4.2 线程阻塞情况 4.3 传递中断 ...

  5. 调用方法try起来的好处_Java:一个重要的停止线程方法——interrupt

    一.前言 之前本人写了一篇防止Controller中的线程被重复调用的文章,大概代码如下: //sonarqube检查要求static变量必须是final,为避开检查,使用final HashMapp ...

  6. jmeter模拟压测真实复杂用户场景,阶梯螺纹线程组Stepping Thread Group终极线程Ultimate Thread Group并发线程Concurrency Thread Group

    我们有时需要模拟非常真实复杂的用户压测场景,可以用到此插件来设计场景 1.安装插件,选项--Plugins Manager打开安装页面 2.搜索standard set并安装,重启jmeter,查看测 ...

  7. Java Review - 创建线程和线程池时建议指定与业务相关的名称

    文章目录 概述 线程 不指定线程名称为何难定位问题 Thread默认的线程名称 指定线程名称 线程池 不指定线程池名称为何难定位问题 指定线程名称 自定义线程名称 小结 概述 在日常开发中,当在一个应 ...

  8. 线程及同步的性能 – 线程池/ ThreadPoolExecutors/ ForkJoinPool

    线程池和ThreadPoolExecutors 虽然在程序中可以直接使用Thread类型来进行线程操作,但是更多的情况是使用线程池,尤其是在Java EE应用服务器中,一般会使用若干个线程池来处理来自 ...

  9. 【Android 异步操作】线程池 ( 线程池 reject 拒绝任务 | 线程池 addWorker 添加任务 )

    文章目录 一.线程池 reject 拒绝任务 二.线程池 addWorker 添加任务 在上一篇博客 [Android 异步操作]线程池 ( 线程池 execute 方法源码解析 ) 中 , 讲解 线 ...

最新文章

  1. 嵌入式开发试题1-100
  2. Vulhub 靶场安装
  3. Quartz2D指定显示范围
  4. BugkuCTF-MISC题善用工具
  5. vscode使用sass_推荐7 个 极好用的VS Code 插件
  6. 【LeetCode】【HOT】301. 删除无效的括号(递归)
  7. [笔记]kubernetes 无法启动问题
  8. 安装和配置SQL Server Reporting Services (SSRS)
  9. java最小子串覆盖_LeetCode 76. 最小覆盖子串
  10. JSP中Session的使用
  11. 《Effective Java 3rd》读书笔记——泛型
  12. 数据库—并发调度的可串行性
  13. 除了输入法,移动端AI还有哪些想象空间?
  14. calendar控件使用 extjs_Calendar 日历控件使用
  15. 计算机中xp系统中qq文件,从做完xp系统怎样恢复qq文?
  16. java-等差等比求和
  17. 数据库操作(DML,DCL,DQL)
  18. 十年外贸人的心得:开发国外客户的正确思路和方法
  19. 【音乐】火速收藏!KTV新歌 +老歌10000首+点歌系统支持手机点歌1.6t音乐文件
  20. 新猿木子李:0基础学python培训教程 Python操作Redis之集合类型2

热门文章

  1. Android invalidate、requestLayout
  2. python 二进制文件的读写
  3. 《WebAssembly 权威指南》(7)WebAssembly 表
  4. 避开QQ聊天时遭受攻击的安全技巧(转)
  5. 一部合格的手机是怎么生产出…
  6. Django 入门(个人学习笔记,持续更新)
  7. Ubuntu14.04_X64 + ATI显卡 安装Caffe
  8. 小程序自定义导航栏高度
  9. 词云可视化:四行Python代码轻松上手到精通
  10. AWS Control Tower