多线程中线程池常见7个参数的详解以及执行流程
一 线程池常见参数
1.1 概念
1.2 7个参数说明
7个参数:
int corePoolSize, 常驻线程数量(核心)
int maximumPoolSize,最大线程数量
long keepAliveTime,TimeUnit unit,线程存活时间
BlockingQueue<Runnable> workQueue,阻塞队列(排队的线程放入)
ThreadFactory threadFactory,线程工厂,用于创建线程
RejectedExecutionHandler handler拒绝策略(线程满了)
1.3 coresize和maxsize,poolsize
1.corePoolSize:
线程池的核心线程数量,线程池的基本大小,即在没有任务需要执行的时候线程池的大小,并且只有在工作队列满了的情况下才会创建超出这个数量的线程。
2.maximumPoolSize:
线程池中允许的最大线程数
3.poolSize:
线程池中当前线程的数量
3者之间的关系:
新提交一个任务时的处理流程很明显:
1、如果当前线程池的线程数还没有达到核心线程数(poolSize < corePoolSize),无论是否有空闲的线程,都新增一个线程处理新提交的任务;
2、如果当前线程池的线程数大于或等于核心线程数(poolSize >= corePoolSize) 且任务队列未满时,就将新提交的任务提交到阻塞队列排队,等候处理workQueue.offer(command);
3、如果当前线程池的线程数大于或等于核心线程数(poolSize >= corePoolSize) 且任务队列满时;
3.1、当前poolSize<maximumPoolSize,那么就新增线程来处理任务;
3.2、当前poolSize>=maximumPoolSize,那么意味着线程池的处理能力已经达到了极限,此时需要拒绝新增加的任务。至于如何拒绝处理新增的任务,取决于线程池的饱和策略RejectedExecutionHandler。
1.4 newFixedThreadPool
newFixedThreadPool中设定的线程数是核心线程数,还是最大线程数,开源代码如下:
底层继续查看 new ThreadPoolExecutor的源代码
通过查看源码:答案是:核心线程数和最大线程数都设置成了定义的线程数量。
多线程中线程池常见7个参数的详解以及执行流程相关推荐
- 线程池的创建及参数设置详解
一. 常见线程池 线程池的创建方法主要有两类,第一是通过Executors 创建线程池,第二是通过 ThreadPoolExecutor 创建线程池. 首先我们来看通过Executors 创建的线程池 ...
- 【多线程】线程池的创建和参数设定
为什么要使用线程池 在日常开发中为了提高代码运行效率,或多或少会用线程去执行异步任务,线程的创建和销毁是需要占用一定资源的. 首先我们看一下一个线程的创建步骤: 为线程堆栈分配和初始化大量内存块 需要 ...
- 深入剖析线程池基本原理以及常见面试题详解
文章目录 面试官:能给我讲讲线程池的实现原理? 线程池类继承关系 ThreadPoolExecutor 核心数据结构 面试官:给我讲讲线程池的有哪些参数? 面试官:如何优雅的关闭线程? 线程的生命周期 ...
- 线程池框架_Java并发——Executor框架详解(Executor框架结构与框架成员)
一.什么是Executor框架? 我们知道线程池就是线程的集合,线程池集中管理线程,以实现线程的重用,降低资源消耗,提高响应速度等.线程用于执行异步任务,单个的线程既是工作单元也是执行机制,从JDK1 ...
- 多线程之线程池-各个参数的含义- 阿里,美团,京东面试题目
阿里的面试官问了个问题,如果corepollSize=10,MaxPollSize=20,如果来了25个线程 怎么办, 答案: 当一个任务通过execute(Runnable)方法欲添加到线程池时: ...
- Java多线程之线程池7大参数、底层工作原理、拒绝策略详解
Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...
- pool python 传参数_Python-爬虫-多线程、线程池模拟(urllib、requests、UserAgent、超时等)...
接着之前的MonkeyLei:Python-爬取页面内容(涉及urllib.requests.UserAgent.Json等) 继续练习下多线程,线程池模拟.. 我想这样: 1. 创建一个线程池,线程 ...
- 后端开发【一大波有用知识】Redis中的IO多线程(线程池)
一.Redis中的IO多线程原理 服务端收到一条信息,给它deconde成一条命令 然后根据命令获得一个结果(reply) 然后将结果encode后,发送回去 redis的单线程是指,命令执行(lo ...
- Java的多线程和线程池的使用,你真的清楚了吗?
Java的多线程和线程池的使用 多线程大大提高程序运行效率,我们在开发过程中经常会开启一个线程来执行一些费时的任务.开启一个线程有4种方式,在下面的文章我将详细的去讲解. 继承Thread 继承Thr ...
最新文章
- mysql 4.0.27 下载,CentOS编译Mysql 4.0.27数据库问题解决
- CrowdStrike加入VirusTotal阵营
- Gartner:人工智能将促使部分专业工作转型
- 三级结构_kegg pathway三级层级结构转对应表格
- Android 反编译apk文件(转)
- Leetcode--221.最大正方形
- 大学计算机一级word,大学计算机基础一级考试复习资料
- Linux 初始化之 Systemd机制简介
- 3-20Pytorch与张量裁剪运算
- 7000 亿!华为正式宣布,全世界为之颤抖!
- 最近写mapreduce程序从hbase中抽取程序遇到的一些问题
- IEEE极限编程:Word Ordering
- IIS 部署.NET网站无法访问解决办法
- 排序算法大比拼(2.1)——时间O(n log2n)篇之归并排序
- linux win10双系统启动顺序,Windows 10 和 Ubuntu 20.04 双系统 GRUB2 默认启动项的更改...
- 90%的人都不知道的Node.js 依赖关系管理(上)
- R语言使用caret包的train函数构建adaboost模型、模型调优、自定义设置trainControl函数和tuneLength参数
- 什么是模块化?为什么要模块化
- root+android+8.0,安卓8.0,手机ROOT权限获取依旧必备还是多此一举
- 中文之星智能狂拼iii .3 适中版 build 060612 官网
热门文章
- 7-85 根据输入的空气污染指数,输出相应的信息。7-86 分支结构——大小写字母判断7-87 A±B
- 北京大学肖臻老师《区块链技术与应用》公开课笔记17——ETH数据结构篇1(状态树1)
- 10分钟上手pythonpandas_10分钟pandas教程
- 【343天】我爱刷题系列102(2018.01.14)
- 杭电oj —— 2026
- 《云云众声》第90期:久久不见 新年第90期有新精彩!
- 爬虫基本原理与实战---1、爬虫实战概述
- C++中 char* 、string、 char、char[]在各种情况下的输入与输出
- C warning:statement with no effect [-Wunused-va...
- 计算机怎么剪切音乐然后合在一起,电脑上怎么剪切、合并音乐