future.cancel不能关闭线程_彻底弄懂线程池-newFixedThreadPool实现线程池

a92e2ede66c6e47003ebd307d162cf92.png

public class ExecutorServiceTest {

public static void main(String[] args) throws IOException, InterruptedException {

// 创建一个固定大小的线程池

ExecutorService service = Executors.newFixedThreadPool(3);

for (int i = 0; i < 10; i++) {

System.out.println("创建线程" + i);

Runnable run = new Runnable() {

@Override

public void run() {

System.out.println("启动线程");

}

};

// 在未来某个时间执行给定的命令

service.execute(run);

}

// 关闭启动线程

service.shutdown();

// 等待子线程结束,再继续执行下面的代码

service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);

System.out.println("all thread complete");

}

}

17ab1ca8a00290726b8b69e7d7419c91.gif

解析(Java自学网javazx.com推荐):

1、ExecutorService:

是一个接口,继承了Executor:

public interface ExecutorService extends Executor {

}

2、Executor:

而Executor亦是一个接口,该接口只包含了一个方法:

void execute(Runnable command);

3、Executors:

该类是一个辅助类,此包中所定义的 Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类的工厂和实用方法。

此类支持以下各种方法:

• 创建并返回设置有常用配置字符串的 ExecutorService 的方法。 • 创建并返回设置有常用配置字符串的 ScheduledExecutorService 的方法。 • 创建并返回“包装的”ExecutorService 方法,它通过使特定于实现的方法不可访问来禁用重新配置。 • 创建并返回 ThreadFactory 的方法,它可将新创建的线程设置为已知的状态。 • 创建并返回非闭包形式的 Callable 的方法,这样可将其用于需要 Callable 的执行方法中。

4、创建ExecutorService的方法:

newFixedThreadPool()

创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。

5、ExecutorService的方法:

shutdown

void shutdown()

启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。

抛出:

SecurityException - 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用者修改的线程(因为它没有保持 RuntimePermission("modifyThread")),或者安全管理器的 checkAccess 方法拒绝访问。

启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。

awaitTermination

boolean awaitTermination(long timeout,

TimeUnit unit)

throws InterruptedException

请求关闭、发生超时或者当前线程中断,无论哪一个首先发生之后,都将导致阻塞,直到所有任务完成执行。

参数:

timeout - 最长等待时间

unit - timeout 参数的时间单位

返回:

如果此执行程序终止,则返回 true;如果终止前超时期满,则返回 false

抛出:

InterruptedException - 如果等待时发生中断

请求关闭、发生超时或者当前线程中断,无论哪一个首先发生之后,都将导致阻塞,直到所有任务完成执行。既是等待所有子线程执行结束。

execute

void execute(Runnable command)

在未来某个时间执行给定的命令。该命令可能在新的线程、已入池的线程或者正调用的线程中执行,这由 Executor实现决定。

参数:

command - 可运行的任务

抛出:

RejectedExecutionException - 如果不能接受执行此任务。

NullPointerException - 如果命令为 null

在未来某个时间执行给定的命令。该命令可能在新的线程、已入池的线程或者正调用的线程中执行,这由 Executor 实现决定。

submit

Future> submit(Runnable task)

提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。该 Future 的 get 方法在成功 完成时将会返回 null。

参数:

task - 要提交的任务

返回:

表示任务等待完成的 Future

抛出:

RejectedExecutionException - 如果任务无法安排执行

NullPointerException - 如果该任务为 null

提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。该 Future 的 get 方法在成功 完成时将会返回 null。

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

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

相关文章

Spring实战(十三)Spring事务

1、什么是事务&#xff08;Transaction&#xff09;&#xff1f; 事务是指逻辑上的一组操作&#xff0c;要么全部成功&#xff0c;要么全部失败。 事务是指将一系列数据操作捆绑成为一个整体进行统一管理。如果某一事务执行成功&#xff0c;则该事务中进行的所有数据更改均会提…

解密SVM系列(二):SVM的理论基础(转载)

解密SVM系列&#xff08;二&#xff09;&#xff1a;SVM的理论基础 原文博主讲解地太好了 收藏下 解密SVM系列&#xff08;三&#xff09;&#xff1a;SMO算法原理与实战求解 支持向量机通俗导论&#xff08;理解SVM的三层境界&#xff09; 上节我们探讨了关于拉格朗日乘子…

cout输出数组_让程序从1开始一直执行++操作,10秒钟能输出最大的数是多少

问题描述如果写一段代码&#xff0c;让程序从 1 开始一直执行 操作&#xff0c;在规定的 10s 钟内&#xff0c;你能输出的最大数是多少&#xff1f;并将它打印到屏幕上。乍一看&#xff0c;你会觉得它是一道算法题&#xff0c;再细想&#xff1a;不对&#xff01;这可能是一道…

微信公众号管理

微信公众号图文编辑 在新建图文时&#xff0c;如果有想插入的视频&#xff0c;可以采取获取视频链接再导入的方法&#xff0c;这样会更高效美观。 摘要和多个图文信息的重叠 新建图文信息&#xff0c;在设置封面旁边有图文摘要&#xff0c;图文摘要会在发送出去的界面旁边有显…

页面模板

找了半天的公众号模板&#xff0c;有点坑&#xff0c;微信公众号更新太快了&#xff0c;几个月不看都找不到使用功能了。 页面模板位置 页面模板在现在的话题专辑&#xff0c;如图: 在页面排版中可以实现我一直想要的菜单整理化功能 可以将文章整理后&#xff0c;发布在菜单…

SQL语句输出

select ,print均可以做输出 但如果想用print同时输出字符串和数字时&#xff0c;就需要遇到转换函数convert: declare allstudents int e.g.print’毕业人数为’convert(char,allstudents) 在执行时可能会遇到结果中显示了你的输出信息&#xff0c;而在消息中却没有&#xff0…

.NET面试题解析(04)-类型、方法与继承

转自:http://www.cnblogs.com/anding/p/5248973.html 常见面试题目: 1. 所有类型都继承System.Object吗&#xff1f; 2. 解释virtual、sealed、override和abstract的区别 3. 接口和类有什么异同&#xff1f; 4. 抽象类和接口有什么区别&#xff1f;使用时有什么需要注意的吗&a…

初学python的format之美

初学python的format之美 *区别于C语言的输出语句的是python的输出用的是"print"而不是“printf”。 1.简单的字符串和变量一起输出 python中的替代使用的是“{}” nameinput("请输入一个人的名字") countryinput("请输入一个国家的名字") prin…

20.链式队列

运行截图: 完整代码: 1 #include <stdio.h>2 #include <stdlib.h>3 4 #define datatype int5 6 typedef struct queue7 {8 datatype data;9 struct queue *pNext; 10 }Queue,*PQueue; 11 12 //入队 从尾部入,从头部出 13 PQueue enq(PQueue phead, dataty…

1到n阶乘算法的改进

1到n阶乘算法的改进 之前用到过好几次了&#xff0c;但总是很长时间不用就会忘了&#xff0c;所以这次直接把它扔进来了。 之前总是喜欢用双层循环&#xff0c;其实一个单层循环足以&#xff0c;下面将用Python和C两种语言进行展示 C&#xff1a; #include<iostream> …

lua 调用文件中的函数调用_深入Lua:调用相关的指令

前言这一节我们来深入解析与调用相关的指令&#xff0c;这些指令是&#xff1a;OP_CALL 调用OP_TAILCALL 尾调用OP_VARARG 可变参数OP_RETURN 返回解析这些指令的过程中&#xff0c;最重要的是时刻跟踪栈的变化情况。简单调用OP_CALL 的语法是&#xff1a;R(A), ... ,R(AC-2) :…

算法基础——列表查找

whats the 算法 算法&#xff08;Algorithm&#xff09;是指解题方案的准确而完整的描述&#xff0c;是一系列解决问题的清晰指令&#xff0c;算法代表着用系统的方法描述解决问题的策略机制。也就是说&#xff0c;能够对一定规范的输入&#xff0c;在有限时间内获得所要求的输…

Python画板画图之美

Python画板画图之美 *turtle.done() #可让画板窗口停止*1.绘制同切圆 pensize为画笔宽度 circle(n),n为半径大小&#xff0c;两者单位均为像素 import turtle turtle.pensize(2) #画笔宽度&#xff0c;单位为像素 turtle.circle(10) #圆半径&…

python request库_【Python爬虫】Request库入门

什么是爬虫&#xff1f; 网络爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还…

world文档粘贴图片进去看不到

在大学做实验报告的时候经常要插入一些截图&#xff0c;往往会遇到直接复制粘贴图片会看不到的情况&#xff0c;会很烦&#xff0c;我自己也找了好多方法&#xff0c;下面是我最喜欢的简便方法的一种。 解决方法如下: 可以点击鼠标右键选择段落&#xff0c;将行距修改为1.5倍即…

c盘users的用户名怎么改_怎么修改iPhone备份文件夹路径 iPhone C盘路径修改教程【详解】...

iPhone备份文件夹路径怎么修改_iPhone C盘备份路径修改教程 我们都知道iPhone默认的备份是在C盘&#xff0c;不过现在各种视频、照片体积那么大&#xff0c;小小的C盘只怕是负荷不了了&#xff0c;那么有什么办法去修改备份路径呢&#xff0c;下面小编就为大家介绍一下。需要注…

javaweb开发的准备工作——配置篇

1.配置 a. jdk配置&#xff08;用于web开发编程&#xff0c;此处不需要配置path&#xff0c;只需配置环境变量即可&#xff09; b. tomcat配置 打开Tomcat&#xff08;打开bin目录下的startup.bat文件&#xff09; 检验是否打开成功(两个网址都可以&#xff0c;出现汤姆猫即为…

阅读引擎开源项目调研总结

农历腊月初二&#xff0c;也是冬至后的第四个九天&#xff0c;俗称“四九”。冬至这一天开始数九&#xff0c;这就是人们所说的“提冬数九”。数上9天是一九&#xff0c;再数9天是二九……数到“九九”就算“九”尽了&#xff0c;“九尽杨花开”&#xff0c;那时天就暖了。《九…

ftp 上传文件夹_命令行连接FTP服务器

Windows下&#xff1a;打开命令行窗口&#xff0c;输入 ftp&#xff0c;进入ftp命令模式&#xff1a;输入 open ip地址 端口&#xff0c;进入ftp服务器&#xff0c;如open 172.16.3.77 2121。如下图&#xff1a;输入Windows下的用户名&#xff0c;然后输入密码&#xff08;注意…

创建实现一个简单的web项目

创建一个新的web项目 注意要选择Dynamic Web Project&#xff0c;第一次用可能要找一下&#xff0c;也可以直接搜索栏搜web&#xff0c;就会出来 图片是我自己照片照的&#xff0c;不好截图&#xff0c;看到有个人影勿慌哈哈哈哈&#xff0c;不是你眼睛的问题。 然后在web文件目…