在开发过程中我们常常需要使用到多线程来提高我们代码处理某些任务的效率,最基本的两种创建多线程的方式分别是继承Thread类和实现Runnable接口。但是创建线程和销毁线程的系统开销比较大,而且过多的线程会占用过多的内存等资源。在《阿里巴巴Java开发手册》中也提示我们“线程资源必须通过线程池提供,不允许在应用中自行显式创建线程”。所以我们引入了线程池。

一、常见的5种线程池分别是:

1、FixedThreadPool,它的核心线程数和最大线程数是一样的,可以把它看成是固定线程数的线程池;

2、CachedThreadPool,可以把它叫做可缓存线程池,它的特点是线程数可以持续增加(理论最大可达Integer.MAX_VALUE=2^31-1);

3、ScheduledThreadPool,它支持定时或周期性的执行任务,有3个方法可以灵活的执行频率配置参数;

4、SingleThreadExecutor,它会使用唯一的线程去执行任务,适用于所有任务都需要按照被提交的顺序依次执行的场景;

5、SingleThreadScheduledExecutor,它和SingleThreadExecutor有些类似,它的核心线程数是1,但是最大线程数是Integer.MAX_VALUE。

二、创建方法:

使用 Executors 去创建,这个些线程池对应的方法都是静态的,例:

Executors.newFixedThreadPool(10);

三、参数对比:

参数

FixedThreadPool

CachedThreadPool

ScheduledThreadPool

SingleThreadExecutor

SingleThreadScheduledExecutor

corePoolSize

构造函数传入

0

构造函数传入

1

1

maxPoolSize

同corePoolSize

Integer.MAX_VALUE

Integer.MAX_VALUE

1

Integer.MAX_VALUE

keepAliveTime

0

60s

0

0

0

workQueue

LinkedBlockingQueue

SynchronousQueue

DelayedWorkQueue

LinkedBlockingQueue

DelayedWorkQueue

当我们去看这些线程池的实现的时候,会发现它们最终都创建ThreadPoolExecutor对象,也就是说上面的这5个线程池只是对ThreadPoolExecutor做了一层封装而已,让他们适用一些特定的场景。在《阿里巴巴Java开发手册》中提示我们“线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险”。所以我们在实际创建线程池的时候一般都是通过ThreadPoolExecutor这种方式。

Java常见的5种线程池相关推荐

  1. java常用的几种线程池

    1. 为什么使用线程池 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到达服务器,这种方式可能是通过网络协 ...

  2. 常见的6种线程池及简单使用

    jdk8线程池一共有6种,分别是 CachedThreadPool(cached线程池,当有任务进来的时候如果有空闲的线程则直接利用,如果无空闲线程,则新创建一个线程出来使用), ScheduleTh ...

  3. Java 中的几种线程池,你之前用对了吗,互联网 面试官 如何面试

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 好久 ...

  4. Java提供的几种线程池总结

    Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程 newFix ...

  5. java常用的几种线程池比较

    1. 为什么使用线程池 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到达服务器,这种方式可能是通过网络协 ...

  6. Android中常见的4种线程池的理解(转)

    转:https://blog.csdn.net/l540675759/article/details/62230562 转:https://blog.csdn.net/seu_calvin/artic ...

  7. Android开发——Android中常见的4种线程池(保证你能看懂并理解)

    0.前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52415337 使用线程池可以给我们带来很多好处,首先通过线程池中线程的重用 ...

  8. 【Java中的四种线程池】

    目录 1.CachedThreadPool - 可缓存线程池 2.FixedThreadPool - 定长线程池 3.SingleThreadExecutor - 单线程池 4.ScheduledTh ...

  9. Java多线程系列(五):线程池的实现原理、优点与风险、以及四种线程池实现

    为什么需要线程池 我们有两种常见的创建线程的方法,一种是继承Thread类,一种是实现Runnable的接口,Thread类其实也是实现了Runnable接口.但是我们创建这两种线程在运行结束后都会被 ...

最新文章

  1. 中山大学 计算机院博士录取名学,中山大学2021年博士研究生招生拟录取名单公示,2510人!...
  2. vue中如何使用i18n实现国际化
  3. 为什么计算机桌面图标不见了,电脑桌面图标都没了,详细教您电脑桌面图标都没了怎么恢复...
  4. linux命令we,Linux学习篇之基础命令
  5. IntelliJ IDEA 初始化项目时No Java SDK Found
  6. Jekyll本地搭建开发环境以及Github部署流程
  7. GPS开发常用方法和Criteria确定android location providerGPS
  8. ZN200以太网转串口TTL(1)
  9. xplay6android降级,xplay6 7.0降级6.0卡刷包
  10. 中国30家值得信赖的大数据采集公司汇总!
  11. 云洲智能,能否成为科创板无人船艇第一股?
  12. 下载安装tushare
  13. R语言 tidyverse 之数据处理:dplyr (中)
  14. javaScript常用语法(持续更新)
  15. SDU项目实训——同态加密技术学习
  16. 计算机博弈之国际跳棋入门-棋子可行招搜索
  17. 合并报表中现金流量表需要相互抵消吗?有哪些抵消的规则?
  18. MAC中TexLive+texmaker+JabRef引用文章
  19. 计算机硬件工程师面试题集,嵌入式硬件工程师必备 21个计算机体系架构面试题...
  20. android签名常用命令

热门文章

  1. [附源码]计算机毕业设计springboot健身房信息管理
  2. RC4算法原理与应用 —— 密码与密码工程实践No.1
  3. TCP调试-16进制调试
  4. 锐捷交换机最常用配置方法
  5. 站在攻击者的角度做防护
  6. oracle没有提交更新,oracle 中更新update不成功的原因
  7. 基于Android的儿童成长APP的设计与实现
  8. 云服务器安装Redis
  9. 宝贝一到夜间就找妈妈,怎么让宝贝不再黏自己?
  10. 探索学习和入门使用GitHub Copilot:提升代码开发的新利器