什么是线程池(thread pool)?
在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内
存资源或者其它更多资源。在 Java 中更是如此,虚拟机将试图跟踪每一个对象,
以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽
可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁,这就
是”池化资源”技术产生的原因。线程池顾名思义就是事先创建若干个可执行的
线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完
毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。
Java 5+中的 Executor 接口定义一个执行线程的工具。它的子类型即线程池接口
是 ExecutorService。要配置一个线程池是比较复杂的,尤其是对于线程池的原理
不是很清楚的情况下,因此在工具类 Executors 面提供了一些静态工厂方法,生
成一些常用的线程池,如下所示:
newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只
有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线
程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执
行顺序按照任务的提交顺序执行。第 280 页 共 485 页
newFixedThreadPool:创建固定大小的线程池。每次提交一个任务就创
建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就
会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。
newCachedThreadPool:创建一个可缓存的线程池。如果线程池的大小
超过了处理任务所需要的线程,那么就会回收部分空闲(60 秒不执行任务)的
线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程
池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说 JVM)
能够创建的最大线程大小。
newScheduledThreadPool:创建一个大小无限的线程池。此线程池支
持定时以及周期性执行任务的需求。
newSingleThreadExecutor:创建一个单线程的线程池。此线程池支持
定时以及周期性执行任务的需求。
什么是线程池(thread pool)?的更多相关文章
- C#多线程实现方法——线程池(Thread Pool)
ThreadPool使用 同步机制 ThreadPool使用 需要定义waitcallback委托形式如 public delegate void WaitCallback(object stat ...
- 简易线程池Thread Pool
1. 基本思路 写了个简易的线程池,基本的思路是: 有1个调度线程,负责维护WorkItem队列.管理线程(是否要增加工作线程).调度(把工作项赋给工作线程)等 线程数量随WorkItem的量动态调整 ...
- MySQL线程池(THREAD POOL)的原理
MySQL常用(目前线上使用)的线程调度方式是one-thread-per-connection(每连接一个线程),server为每一个连接创建一个线程来服务,连接断开后,这个线程进入thread_c ...
- 线程池 (thread pool) 的类型与实现方式
在许多应用中需要频繁的创建许多生命周期很短的线程,如果用传统方法的话就会造成大量的资源了浪费,java的设计者们考虑到了这点在java中加入了线程池这个特性,它负责管理大量的线程的创建销毁等操作. 首 ...
- 使用boost实现线程池thread pool | boost thread pool example
本文首发于个人博客https://kezunlin.me/post/f241bd30/,欢迎阅读! boost thread pool example Guide boost thread pool ...
- MySQL--线程池(Thread Pool)
================================================================= 线程池技术 在MySQL社区版中,MySQL使用one-thread ...
- Spring中的定时调度(Scheduling)和线程池(Thread Pooling)
使用triggers和SchedulerFactoryBean来包装任务 我们已经创建了job details,jobs.我们同时回顾了允许你调用特定对象上某一个方法的便捷的bean. 当然我们仍需要 ...
- 基于C++11的线程池,简洁且可以带任意多的参数
咳咳.C++11 加入了线程库,从此告别了标准库不支持并发的历史.然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现,譬如线程池.信号量等.线程池(thread pool) ...
- 如何决定Web应用的线程池大小
线程池(Thread Pool)在Web应用中线程池的大小决定了在任何一个时间点应用可以处理请求的并发数.如果一个系统收到的请求数超过了线程池的大小,那么超出的请求要么进入等待队列要么被拒绝.请注意, ...
- c++11线程池实现
咳咳.c++11 增加了线程库,从此告别了标准库不支持并发的历史. 然而 c++ 对于多线程的支持还是比較低级,略微高级一点的使用方法都须要自己去实现,譬如线程池.信号量等. 线程池(thread p ...
随机推荐
- python-利用xlrd模块读取excel数据,将excel数据转换成字典格式
前言 excel测试案例数据 转换成这种格式 实现代码 import os import xlrd excel_path = '..\data\\test_case.xlsx' data_path = ...
- Spring Boot 学习-基础
一.Spring Boot 概述 SpringBoot 定义 Spring Boot 并不是用来替代 Spring 的新框架,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具 ...
- GMP
目录 GMP 含义 模型 状态汇总 G状态 P的状态 M的状态 调度场景 总结 GMP 含义 Goroutine的并发编程模型基于GMP模型,简要解释一下GMP的含义: G:表示goroutine,每 ...
- 医疗BI系统的数据分析是怎样的?
在社会日益发展和信息化的过程中,已经发展处行业化.智能化的各类IT系统及子系统,如ERP.CRM.财务等等.实现经营流程数字化的同时,各行业企业的数据库日益庞大,医疗行业也不例外.我国医疗行业经过多年 ...
- Perforce 使用建议
前言 楼主从事Unreal 游戏开发工作,使用VisualStudio 2019 /Rider/VisualStudio Code 开发过,使用Perforce版本管理对代码和资源进行管理. 主要想分 ...
- centos7 下搭建 hfish 2.1.0
HFish是一款基于 Golang 开发的跨平台多功能主动攻击型蜜罐网络钓鱼平台框架系统,为了企业安全防护测试做出了精心的打造 HFish 开发的官网:https://hfish.io HFish地址 ...
- Objective-C 基础教程第五章,复合
目录 Objective-C 基础教程第五章,复合 什么是复合? Car程序 自定义NSLog() 存取方法get Set Tires(轮胎) 存取方法 Car类代码的其他变化 扩展Car程序 复合还 ...
- Qt:QFile、QIODevice
QFile 0.说明 QFile是读写文件的类,这里的文件包括文本文件.二进制文件.资源文件. 通常情况下,文件读写使用QFile.QTextStream.QDataStream就够了. file n ...
- WARN node unsupported "node@v6.11.2" is ......(windows系统更新node版本)
问题: 使用npm下载文件时报错:WARN node unsupported "node@v6.11.2" is incompatible with electron@^7.1.9 ...
- Tableau怎么制作专业图表
Tableau怎么制作专业图表 本文首发于博客冰山一树Sankey,去博客浏览效果更好.直接右上角搜索该标题即可 一. 统计表 1.1 不同种类的图表风格 商业周刊的图表风格 经济学人的图表风格 华尔 ...