线程池三种创建方式和自定义线程池ThreadPoolExecutor
线程池的优势:
线程池做的工作只要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。
它的主要特点为:
1.线程复用;
2.控制最大并发数;
3.管理线程。
第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的销耗。
第二:提高响应速度。当任务到达时,任务可以不需要等待线程创建就能立即执行。
第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会销耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
创建线程池
三种创建线程的方式
ExecutorService threadPool = Executors.newFixedThreadPool(5);
一池五个工作线程,类似银行五个受理窗口
ExecutorService threadPool = Executors.newSingleThreadExecutor();
一池一个工作线程,类似银行一个受理窗口
ExecutorService threadPool = Executors.newCachedThreadPool();
一池N个工作线程,类似银行N个受理窗口 可缓存,比如你当前只有一个人,就只有一个线程,如果当前三个人,里面就有三个线程 可扩展
但是一般开发中不会用这些方式,所以需要自定义线程
ThreadPoolExecutor
它有七大参数
1、 corePoolSize:线程池中的常驻核心线程数
2、maximumPoolSize:线程池中能够容纳同时执行的最大线程数,此值必须大于等于1
3、 keepAliveTime:多余的空闲线程的存活时间当前池中线程数量超过corePoolSize时,当空闲时间达到keepAliveTime时,多余线程会被销毁直到
只刺下corePoolSize个线程为止
4、 unit: keepAliveTime的单位
5、workQueue:任务队列,被提交但尚未被执行的任务
6、threadFactory:表示生成线程池中工作线程的线程工厂,用于创建线程,一般默认的即可
7、handler:拒绝策略,表示当队列满了,并且工作线程大于等于线程池的最人线程数(maximumPoolSize)时如何来拒请求执行的runnable的策略
线程池三种创建方式和自定义线程池ThreadPoolExecutor相关推荐
- 线程的三种创建方式和他们的优缺点
文章目录 一.线程的三种创建方式 1.继承Thread 2.实现Runable接口 3.实现Callable接口 二.三种创建方式的优缺点 1.使用Runnable接口比使用继承Thread的优势 2 ...
- 线程的三种创建方式以及代码实现
线程和进程的概念 一个进程可以有多个线程 程序:是指令和数据的有序集合(静态的) 进程:是执行程序的一次执行过程(动态的),是系统资源分配的单位.在操作系统中运行的程序就是进程. 通常在一个进程中可以 ...
- java线程的任务的三种创建方式,严格地说,就一种,就是如何重写Runnable接口的run()方法
仅简单演示Java中线程任务的三种创建方式 第一种:使用了适配器模式,有返回值,能抛出异常,任务代码写在Callable.call()方法中,Runnable的run方法会通过适配器调用到Callab ...
- Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)
阅读目录 一.MVC与MTV 二.多对多表的创建 三.ajax,前后端传输编码格式contentType 四.批量插入数据与自定义分页器 摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端 ...
- 五分钟教你使用vue-cli3创建项目(三种创建方式,小白入门必看)
五分钟教你使用vue-cli3创建项目(三种创建方式,小白入门必看) 一.搭建vue环境 安装Nodejs 官网下载Nodejs,如果希望稳定的开发环境则下LTS(Long Time Support) ...
- JavaScript 闭包的详细分享(三种创建方式)(附小实例)
JavaScript闭包的详细理解 一.原理:闭包函数--指有权访问私有函数里面的变量和对象还有方法等:通俗的讲就是突破私有函数的作用域,让函数外面能够使用函数里面的变量及方法. 1.第一种创建方式 ...
- Django09:图书管理系统笔记/choices用法/ MTV与MVC模型/多对多三种创建方式
图书管理系统笔记 redirect括号内可以直接写url 也可以直接写别名 但如果别名需要参数,必须使用reverse解析. choices用法 使用场景:能列举完全的数据 #使用方法:xxx_cho ...
- Servlet 的三种创建方式
Servlet 创建有三种方式. 1.实现 Servlet 接口 因为是实现 Servlet 接口,所以我们需要实现接口里的方法. 下面我们也说明了 Servlet 的执行过程,也就是 Servlet ...
- Django 数据库查询优化,choices参数(数据库字段设计常见),MVC和MTV模型,多对多三种创建方式...
数据库查询优化 orm语句的特点:惰性查询 如果仅仅只是书写了orm语句,在后面没有用到该语句所查询出来的参数,那么orm会自动识别,并不执行 举例: res = models.Book.object ...
最新文章
- 【解题报告】Leecode 438. 找到字符串中所有字母异位词——Leecode每日一题系列
- GDI+ 学习记录(10): 线性渐变画刷 - LinearGradientBrush
- 深入浅出React Native 1: 环境配置
- c#中datagridview里checkbox的使用方法[转]
- Fastdfs分布式文件系统的应用
- c语言 pdf支持库,解决支持库版本兼容问题:引入包时候support包有红色下划线
- LRC软件测试简历,C语言 LRC歌词文件解析
- android 模拟器 itools,itools安卓模拟器
- CDISC SDTM AE domain学习笔记 - 1
- b站缓存的.blv和.m4s视频文件格式转换
- 学好英语,才能当个好程序员,英语基础语法总结
- 开心网(http://www.kaixin001.com)的一些JS代码分享
- 从此甩掉光驱 U盘安装系统最详攻略
- Ubuntu 机箱前置音频接口不能用的解决方法
- 汉字编码问题(附编码察看器)
- 高级软件工程第九次作业:东理三剑客团队作业-随笔6
- 线程wait和notify方法
- httpclient3.0调用basic auth接口
- python显示给定数字因数分解_Python练习题 010:分解质因数
- 论大学生能参加的比赛,看这一篇文章就够了
热门文章
- 30 PP配置-生产车间控制-定义计划策略
- 50 FI配置-财务会计-固定资产-与总账集成-定义集成资产购置的技术清算科目
- ubuntu升级python_Ubuntu 系统下可以做什么?——拥抱自由和安静
- python:文件打包为exe
- Pytorch之Variable与tensor--它封装了Tensor,并整合了反向传播的相关实现,像装糖果(糖果就是数据即tensor)的盒子
- tsc - error TS2304 Cannot find name 'Set'/'Promise'
- 引入Vant-UI全部组件的代码 - (备份)
- phpcms v9宽字节注入问题
- Topsky酒店管理系统v1.4.2.3
- 用python计算列表元素之和_python实现计算列表元素之和