[转载]Java多线程——创建线程池的几个核心构造参数
Java的线程池可以通过ThreadPoolExecutor来创建。ThreadPoolExecutor的构造函数如下所示:
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) {if (corePoolSize < 0 ||maximumPoolSize <= 0 ||maximumPoolSize < corePoolSize ||keepAliveTime < 0)throw new IllegalArgumentException();if (workQueue == null || threadFactory == null || handler == null)throw new NullPointerException();this.acc = System.getSecurityManager() == null ?null :AccessController.getContext();this.corePoolSize = corePoolSize;this.maximumPoolSize = maximumPoolSize;this.workQueue = workQueue;this.keepAliveTime = unit.toNanos(keepAliveTime);this.threadFactory = threadFactory;this.handler = handler;}
corePoolSize:线程池的核心线程数。核心线程会一直存活,即便没有任务需要执行,当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理。设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭。
maximumPoolSize:线程池允许的最大线程数。当线程数>=corePoolSize,且任务队列已满时。线程池会创建新线程来处理任务。当线程数=maxPoolSize,且任务队列已满时,线程池会拒绝处理任务而抛出异常。
keepAliveTime:线程空闲时间。当线程空闲时间达到keepAliveTime时,线程会退出,直到线程数量=corePoolSize。如果allowCoreThreadTimeout=true,则会直到线程数量=0。
unit:keepAliveTime的时间单位。
workQueue:当核心线程数达到最大时,新任务会放在队列中排队等待执行。
threadFactory:线程工厂,ThreadFactory是一个接口,只有一个方法,即newThread(Runnable r)。从这个方法名字就可以知道,这接口是用来创建新的线程的。其使用也很简单,仅仅只需要实现newThread方法,根据自己的需要进行线程的创建即可。
handler:任务拒绝处理器。两种情况会拒绝处理任务:
1)、当线程数已经达到maxPoolSize,切队列已满,会拒绝新任务;
2)、当线程池被调用shutdown()后,会等待线程池里的任务执行完毕,再shutdown。如果在调用shutdown()和线程池真正shutdown之间提交任务,会拒绝新任务线程池会调用rejectedExecutionHandler来处理这个任务。如果没有设置默认是AbortPolicy,会抛出异常。拒绝策略有如下几种:- AbortPolicy 丢弃任务,抛运行时异常。
- CallerRunsPolicy 执行任务。
- DiscardPolicy 忽视,什么都不会发生。
- DiscardOldestPolicy 从队列中踢出最先进入队列(最后一个执行)的任务。
[转载]Java多线程——创建线程池的几个核心构造参数相关推荐
- Java多线程之线程池7大参数、底层工作原理、拒绝策略详解
Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...
- Java多线程之线程池详解
Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...
- java 多线程使用线程池_Java多线程:如何开始使用线程
java 多线程使用线程池 什么是线程? (What is a Thread?) A thread is a lightweight process. Any process can have mul ...
- java多线程之线程池简介
前言 池化技术已经屡见不鲜了,比如数据库连接池,大家的项目中应该也用到了线程池.池化技术的好处:降低资源的消耗,提高响应速度,提高线程的可管理性.本篇主要是和大家一起分析下线程池的架构和它的工作流程. ...
- java多线程及线程池使用
Java多线程及线程池的使用 Java多线程 一.Java多线程涉及的包和类 二.Java创建多线程的方式 三.Java线程池 1. 创建线程池ThreadPoolExecutor的7个参数 2. 线 ...
- JAVA中创建线程池的五种方法及比较
之前写过JAVA中创建线程的三种方法及比较.这次来说说线程池. JAVA中创建线程池主要有两类方法,一类是通过Executors工厂类提供的方法,该类提供了4种不同的线程池可供使用.另一类是通过Thr ...
- Java多线程之线程池配置合理线程数
Java多线程之线程池配置合理线程数 目录 代码查看公司服务器或阿里云是几核的 合理线程数配置之CPU密集型 合理线程数配置之IO密集型 1. 代码查看公司服务器或阿里云是几核的 要合理配置线程数首先 ...
- Java多线程之线程池的手写改造和拒绝策略
Java多线程之线程池的手写改造和拒绝策略 目录 自定义线程池的使用 四种拒绝策略代码体现 1. 自定义线程池的使用 自定义线程池(拒绝策略默认AbortPolicy) public class My ...
- java 多线程和线程池
● 多线程 多线程的概念很好理解就是多条线程同时存在,但要用好多线程确不容易,涉及到多线程间通信,多线程共用一个资源等诸多问题. 使用多线程的优缺点: 优点: 1)适当的提高程序的执行效率(多个线程同 ...
- Java 多线程:线程池实现原理
前言 我们都知道,所谓线程池,那么就是相当于有一个池子,线程就放在这个池子中进行重复利用,能够减去了线程的创建和销毁所带来的代价.但是这样并不能很好的解释线程池的原理,下面从代码的角度分析一下线程池的 ...
最新文章
- hive的用户和用户权限
- (HY000): Cannot modify @@session.sql_log_bin inside a transaction
- python执行文件函数,python如何运行函数
- BugkuCTF-WEB题文件上传
- go json数据出现unicode_Golang处理JSON(一) 序列化
- npm notice created a lockfile as package-lock.json. You should commit this file.
- redhat5.4上安装oracle9i
- Win7缺失dll文件如何修复?Win7计算机丢失dll文件怎么办
- 【董天一】什么是IPFS(三)
- onenote 无法正常使用的解决办法
- 什么是数字图书馆——What is Digital Library?
- 7种超轻量级的Linux发行版,希望能够帮助你找到适合自己的操作系统
- 还只会用小黄鸭解压?看来你不是一个时髦的程序员!
- 班级奖学金管理系统java_(奖学金评定管理系统设计)(最终版)
- Java项目中利用钉钉机器人Webhook向钉钉群推送告警通知
- python出错 unexpected keyword argument 'categories'
- 编程中的逻辑实现,三种逻辑结构(顺序、循环、分支)、跳转、函数以及错误处理
- 自己动手实现音乐播放器app
- mysql locate和instr_Mysql函数instr、locate、position VS like
- 刘德华--9风雨人生路
热门文章
- 1006 换个格式输出整数 (15 分)—PAT (Basic Level) Practice (中文)
- L1-014 简单题 (5 分)—团体程序设计天梯赛
- 访问javaweb服务器sessionid存放问题
- ORACLE功能GREATEST功能说明具体实例
- win7 64位共享打印机
- 在php中使用Memcache
- VBA实战技巧精粹013:宏代码保存工作簿的3种方法
- php 图像居中裁剪函数,PHP 实现的自定义图像居中裁剪函数示例
- db2 teradata mysql_DB2 DPF VS Teradata选型对比?
- Security+ 学习笔记47 事件响应方案