Java线程池,isShutDown、isTerminated的作用与区别
isShutDown当调用shutdown()或shutdownNow()方法后返回为true。
isTerminated当调用shutdown()方法后,并且所有提交的任务完成后返回为true;
isTerminated当调用shutdownNow()方法后,成功停止后返回为true;
如果线程池任务正常完成,都为false
import java.util.concurrent.Callable;
public class ShortTask implements Callable {
@Override
public Object call() throws Exception {
System.out.println("短任务");
return null;
}
}
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit; public class LongTask implements Callable {
@Override
public Object call() throws Exception {
System.out.println("长任务");
TimeUnit.SECONDS.sleep(5);
return null;
}
}
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) {
ScheduledExecutorService service = Executors.newScheduledThreadPool(4);
service.submit(new ShortTask());
service.submit(new ShortTask());
service.submit(new LongTask());
service.submit(new ShortTask());
System.out.println("isShutdown:" + service.isShutdown());
System.out.println("isTerminated:" + service.isTerminated());
service.shutdown();
// List<Runnable> list = service.shutdownNow();
// System.out.println(list.size());
System.out.println("isShutdown:" + service.isShutdown());
System.out.println("isTerminated:" + service.isTerminated());
try {
while (!service.awaitTermination(1, TimeUnit.SECONDS)) {
System.out.println("线程池没有关闭");
System.out.println("isTerminated:" + service.isTerminated());
}
} catch (InterruptedException e) {
e.printStackTrace();
} System.out.println("线程池已经关闭");
System.out.println("isTerminated:" + service.isTerminated());
}
}
/*
执行service.shutdown();
短任务
短任务
长任务
短任务
isShutdown:false
isTerminated:false
isShutdown:true
isTerminated:false
线程池没有关闭
isTerminated:false
线程池没有关闭
isTerminated:false
线程池没有关闭
isTerminated:false
线程池没有关闭
isTerminated:false
线程池已经关闭
isTerminated:true*/ /*
执行List<Runnable> list = service.shutdownNow();
System.out.println(list.size());
短任务
短任务
长任务
isShutdown:false
isTerminated:false
1
isShutdown:true
isTerminated:false
线程池已经关闭
isTerminated:true
*/ /*
如果不执行shutdown,也不执行shutdownNow:
短任务
短任务
长任务
短任务
isShutdown:false
isTerminated:false
isShutdown:false
isTerminated:false
线程池没有关闭
isTerminated:false
线程池没有关闭
isTerminated:false
线程池没有关闭
isTerminated:false
线程池没有关闭
isTerminated:false
线程池没有关闭
isTerminated:false
线程池没有关闭
isTerminated:false
线程池没有关闭
isTerminated:false
线程池没有关闭
isTerminated:false
线程池没有关闭
isTerminated:false
......一直这样输出
*/
Java线程池,isShutDown、isTerminated的作用与区别的更多相关文章
- java线程池的使用与详解
java线程池的使用与详解 [转载]本文转载自两篇博文: 1.Java并发编程:线程池的使用:http://www.cnblogs.com/dolphin0520/p/3932921.html ...
- Java线程池使用和常用参数
多线程问题: 1.java中为什么要使用多线程使用多线程,可以把一些大任务分解成多个小任务来执行,多个小任务之间互不影像,同时进行,这样,充分利用了cpu资源. 2.java中简单的实现多线程的方式 ...
- 【java线程系列】java线程系列之java线程池详解
一线程池的概念及为何需要线程池: 我们知道当我们自己创建一个线程时如果该线程执行完任务后就进入死亡状态,这样如果我们需要在次使用一个线程时得重新创建一个线程,但是线程的创建是要付出一定的代价的,如果在 ...
- 并发编程(十一)—— Java 线程池 实现原理与源码深度解析(一)
史上最清晰的线程池源码分析 鼎鼎大名的线程池.不需要多说!!!!! 这篇博客深入分析 Java 中线程池的实现. 总览 下图是 java 线程池几个相关类的继承结构: 先简单说说这个继承结构,E ...
- Netty核心概念(7)之Java线程池
1.前言 本章本来要讲解Netty的线程模型的,但是由于其是基于Java线程池设计而封装的,所以我们先详细学习一下Java中的线程池的设计.之前也说过Netty5被放弃的原因之一就是forkjoin结 ...
- Java线程池的底层实现与使用
前言 在我们进行开发的时候,为了充分利用系统资源,我们通常会进行多线程开发,实现起来非常简单,需要使用线程的时候就去创建一个线程(继承Thread类.实现Runnable接口.使用Callable和F ...
- 【转载】深度解读 java 线程池设计思想及源码实现
总览 开篇来一些废话.下图是 java 线程池几个相关类的继承结构: 先简单说说这个继承结构,Executor 位于最顶层,也是最简单的,就一个 execute(Runnable runnable) ...
- Java并发指南12:深度解读 java 线程池设计思想及源码实现
深度解读 java 线程池设计思想及源码实现 转自 https://javadoop.com/2017/09/05/java-thread-pool/hmsr=toutiao.io&utm_ ...
- 深入理解 Java 线程池
一.简介 什么是线程池 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务. 为什么要用线程池 如果并发请求数量很多,但每个线程执行的时间很短,就会出现频繁的创建 ...
- Java线程池使用说明
Java线程池使用说明 转自:http://blog.csdn.net/sd0902/article/details/8395677 一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极 ...
随机推荐
- 对cell每一行做标记
通过数组进行标记 初始化列表的时候给一个值如 for (int i = 0; i < [self.tableData count]; i++) { [_allOrderBoo ...
- vue学习指南:第九篇(详细) - Vue的 Slot-插槽
Slot v-slot 插槽元素 浏览器在解析时候首先把它当作标签来解析,只有遇到不认识的就不管了,直接跳过,当你发现是组件,在以组件形式解析. 使用插槽的好处? 比如一个网站 分布顶部都是一样的, ...
- Redis 使用过程中遇到的具体问题
1.缓存雪崩和缓存穿透问题 1.1缓存雪崩 简介:缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉. 解决办法: 事前:尽量保证整个 redis 集 ...
- 终端的乐趣--Linux下有趣的终端命令或者工具【转】
转自:https://blog.csdn.net/gatieme/article/details/52144603 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...
- 安装教程-VMware 12 安装 Windows 10 企业版
VMware 12 安装 Windows 10 企业版 1.实验描述 在虚拟机中,手动安装 Windows10 企业版操作系统,为一些实验提供平台,因此,有关系统激活问题不再演示.可自行百度,或者加入 ...
- centos6.5 yum搭建安装linux+apache+mysql+php环境
一.脚本YUM源安装: 1.yum install wget #安装下载工具wget2.wget ...
- c# 第五节 第一个控制台程序、第一个桌面、快捷键、注释
本节内容: 1:控制台程序的创建 2:第一个桌面程序 3:快捷键 4:注释 一.第一个控制台程序: 这就是控制台程序: 打开你的vs2015,按如下操作 二.第一个桌面程序 比如当我们删除一个东西会弹 ...
- centos虚拟机 与主机同步时间
同步系统时间: yum install ntp ntpdate cn.pool.ntp.org ntpdate 0.centos.pool.ntp.org rm /etc/localtime ln - ...
- JDOJ3010 核反应堆
JDOJ3010 核反应堆 https://neooj.com/oldoj/problem.php?id=3010 题目描述 某核反应堆有两类事件发生: 高能质点碰击核子时,质点被吸收,放出3个高能质 ...
- 实现一个new操作符
new 操作符做了这些事: 1.它创建了一个全新的对象: 2.它会被执行[[Prototype]](也就是__proto__)链接: 3.它使this指向新创建的对象: 4.通过new创建的每个对象最 ...