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极 ...
随机推荐
- ios 开发学习步骤
https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/RoadMapiOSCh/Wher ...
- vue学习指南:第九篇(详细) - Vue的 Slot-插槽
Slot v-slot 插槽元素 浏览器在解析时候首先把它当作标签来解析,只有遇到不认识的就不管了,直接跳过,当你发现是组件,在以组件形式解析. 使用插槽的好处? 比如一个网站 分布顶部都是一样的, ...
- Scrum 冲刺第三篇
是我们是这次稳了队,队员分别是温治乾.莫少政.黄思扬.余泽端.江海灵 一.会议 1.1 27号站立式会议照片: 1.2 昨天已完成的事情 团队成员 今天计划完成的任务 黄思扬 活动平台首页(前端) ...
- 相同域名下的cookie污染
问题描述 本地用同一个tomcat调试两个相同框架的不同项目,在同一个浏览器界面里切换时,A项目的登录会把B项目的登录给踢掉,翻反过来亦如此.通过查看浏览器cookie,发现两个项目的cookie完全 ...
- 【web后端开发】笔试题收集
4399Web后端开发笔试题 题目来源:牛客网 1.linux中,用mkdir命令创建新的目录时,如果需要在其父目录不存在时先创建父目录的选项是 D A -h B -d C -f D -p [ ...
- 白话SCRUM之五:四种会议
在SCRUM方法中定义了4种会议活动: Sprint planning Daily meeting Sprint review Sprint retrospective 除去开发活动外这4种会议构成了 ...
- Docker 网络简单说明
docker0 网络模型小结 Docker Daemon 会创建出一个名为 docker0 的虚拟网桥 ,用来连接宿主机与容器,或者连接不同的容器. veth pair 是用于不同network na ...
- LCD RGB 控制技术讲解 — 时钟篇(上)【转】
1. 时序图 下面是LCD RGB 控制的典型时序图 天啊,一下就上这玩意,怎么看??? 其实要解释上面的时序图,我们还需要了解一些LCD的显示过程.所以现在只是有个印象,稍后我们详细讲解. 2. L ...
- 《SQL Server 2008 R2》 收缩数据库日志文件
USE [master] GO /****** Object: StoredProcedure [dbo].[pro_Shrink_Log] Script Date: 2019/8/16 16:56: ...
- P3731 [HAOI2017]新型城市化(tarjan+网络流)
洛谷 题意: 给出两个最大团的补图,现在要求增加一条边,使得最大最大团个数增加至少\(1\). 思路: 我们求出团的补图,问题可以转换为:对于一个二分图,选择删掉一条边,能够增大其最大独立集的点集数. ...