什么是线程池(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 ...
随机推荐
- 【转】浅谈 Integer 类
突然发现自己对Integer i = 10;这种语法不太明白,于是乎有了这篇文章,那么在讲解 Integer 之前,我们先看下面这段代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- 16进制转字符串得到flag
工业协议分析2 666c61677b37466f4d3253746b6865507a7d
- [Graphviz]一些简单的例子(未完待续)
本文参考:http://wenku.baidu.com/link?url=kTPIn5tBY4eboEPZeOZyLwHAq-fSMoTbagsqcG5-IcpL325tnnh3ES8aky-PBjP ...
- 带你玩转CompletableFuture异步编程
前言 最近在忙生活的第一个OKR,这个等等后面具体聊聊,今天开始恢复每周一篇原创,感谢小伙伴的不离不弃.这篇文章也是最近在Code Review的时候,看到的大家代码,想整体推下大家异步编程的思想,由 ...
- 零基础小白也能用的商业智能BI工具,自助式就是香!
随着数字化时代的到来,数据已经成为企业无形的资源,企业对员工的数据分析能力也提出了新的要求.掌握一定的数据分析能力无疑会大大增加自己在职场中的竞争力,但并不是所有人都具备专业的数据分析基础,尤其是虽 ...
- 想找好用的BI软件?看这一篇就够了:2021年好用的BI软件推荐
很多厂商活跃在商业智能(下面称BI)领域.事实上,能够满足用户需要的BI产品和方案必须建立在稳定.整合的平台之上,该平台需要提供用户管理.安全性控制.连接数据源以及访问.分析和共享信息的功能.那么,有 ...
- C语言中一些知识点
1.学编程:找代码,读代码,改代码,写代码:少看书.但少看不是不看,看一本书要限制在一天内.任务是通读书中主要的概念,明白大致是干什么用的,形成一个大概的框架:然后一周内干掉书中全部代码,代码不理解再 ...
- pandas模块补充
数据分析模块pandas和matplotlib补充 面向百度式编程 面向百度式工作 遇到没有见过的知识点或者是相关知识点一定不要慌,结合百度和已知的知识点去学习 pandas模块补充 基于numpy构 ...
- JZ-005-用两个栈实现队列
用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目链接: 用两个栈实现队列 代码 import java.util.Stack; / ...
- tp 天气Vue参考
<!DOCTYPE html> <html> <head> <title>Bootstrap 实例</title> <meta cha ...