从零学习JAVA多线程(五):线程池的简单介绍
来源:互联网 发布:java带参的构造方法 编辑:程序博客网 时间:2024/09/21 09:28
- 线程池的介绍
- 线程池是什么
- 为什么要使用线程池
- 线程池的实现
- Executor类接口的静态方法
线程池的介绍
线程池是什么
线程池就是一个系统中统一管理线程资源的管理器,我们将系统中的线程资源都放在线程池里,如果有任务需要新建线程,那就从池子里拿一个,用完再还回来。如果在新建任务时所有线程都没有空闲,则根据线程池的设置统一管理。所以线程池就是系统中的一个线程资源库,统一管理系统内的线程。
为什么要使用线程池
线程池主要是为了解决两个问题:一是降低构建和销毁线程的成本,提高程序性能;二是降低内存中并发线程的数目。分开解析这两种场景:
我们将系统调用一个线程执行任务的时间成本分为三个组成部分:创建线程时间、线程执行任务时间和销毁线程时间。如果一个任务在系统中是需要不断重复执行的,那么创建线程和销毁线程的时间就属于多余时间成本了,如果能够降低这两个部分的时间消耗,我们的程序性能毫无疑问会得到提升。
假设系统中存的线程可能会高并发的执行,那么当线程的并发数量达到一定程度的时候,系统的内存就会被撑爆,然后我们的程序就会崩溃,系统宕机。为了避免这种情况的发生,我们就要给线程的并发数量设定一个上限,避免系统因为内存不足挂掉。
线程池的实现
Executor类接口的静态方法
Java的Executor类提供了静态工厂方法来构建线程池。
经常使用的线程池是newCachedThreadPool和newFixedThreadPool。
使用线程池的时候,应该遵从这样的顺序:
- 调用newCachedThreadPool或者newFixedThreadPool静态方法,返回ExecutorService接口的ThreadPoolExecutor类对象
- 调用ExecutorService接口的submit方法,向线程池提交任务,返回一个Future对象,可以使用Future对象查询任务状态
- 调用shotdown或者shutdownNow方法关闭线程池,前者会将线程池内现存的任务执行完再关闭,后者会立刻关闭。
Java多线程基础知识到这里结束,给自己鼓鼓掌。
本来想在这一部分里面把Spring的线程池也加上的,但是想想Spring的线程池至少要给个代码实现,最近赶上了键盘坏、笔记本坏各种事儿,修修补补重搭环境还要耽误几天,索性把线程池的基础先发了,也算是把多线程这个部分完结掉。
这是我完成的第一个算是比较系统的技术文章了,写得有好多不足,内容也比较基础,有些知识点想塞进去一展开就啰啰嗦嗦一大堆,做不到大牛们那样深入浅出。
工作也两年多了,是个时候整理整理自己的脑子,把看过书写过的代码踩过的坑理一理,后面肯定还会继续写,spring、NIO、JVM都会慢慢整理过去,keep moving。
附上版权声明:
原作者:Vi_error,博客地址:Vi_error.nextval
转载请保持署名和注明原地址**
- 从零学习JAVA多线程(五):线程池的简单介绍
- 从零学习JAVA多线程(二):线程的状态和属性
- 从零学习JAVA多线程(三):线程的同步问题
- 从零学习JAVA多线程(一):认识多线程
- Java多线程之线程池(五)
- java多线程学习五:线程间的通信
- 多线程学习--简单的线程池创建
- Python3从零学习(五)
- 【从0到1学习Java线程池】一个Java线程池的简单实现
- 不算重零开始的java学习(五)
- Java多线程线程池(4)--线程池的五种状态
- 零基础学习java(五)
- java的线程池ExecutorService简单介绍
- Java 的线程池 ExecutorService 简单介绍
- 多线程学习(五)线程的调度-休眠&优先级
- java多线程总结五:线程池的原理及实现
- java多线程总结五:线程池的原理及实现
- java多线程总结五:线程池的原理及实现
- java 形式参数和返回值详谈
- 《java与模式》-5 抽象类
- 欢迎使用CSDN-markdown编辑器
- 数据库的三大范式
- 创建类和对象
- 从零学习JAVA多线程(五):线程池的简单介绍
- AngularJS路由与修改
- myeclipse 引入jar包 (包括 jdbc 驱动引用)
- git上传项目至GitHub
- java 多线程 以并发的处理
- 安装setuptools
- SQL Server 2012数据库基础
- tar解压出错tar: Child returned status 1
- mongodb学习1