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;}
  1. corePoolSize:线程池的核心线程数。核心线程会一直存活,即便没有任务需要执行,当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理。设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭。

  2. maximumPoolSize:线程池允许的最大线程数。当线程数>=corePoolSize,且任务队列已满时。线程池会创建新线程来处理任务。当线程数=maxPoolSize,且任务队列已满时,线程池会拒绝处理任务而抛出异常。

  3. keepAliveTime:线程空闲时间。当线程空闲时间达到keepAliveTime时,线程会退出,直到线程数量=corePoolSize。如果allowCoreThreadTimeout=true,则会直到线程数量=0。

  4. unit:keepAliveTime的时间单位。

  5. workQueue:当核心线程数达到最大时,新任务会放在队列中排队等待执行。

  6. threadFactory:线程工厂,ThreadFactory是一个接口,只有一个方法,即newThread(Runnable r)。从这个方法名字就可以知道,这接口是用来创建新的线程的。其使用也很简单,仅仅只需要实现newThread方法,根据自己的需要进行线程的创建即可。

  7. handler:任务拒绝处理器。两种情况会拒绝处理任务:
    1)、当线程数已经达到maxPoolSize,切队列已满,会拒绝新任务;
    2)、当线程池被调用shutdown()后,会等待线程池里的任务执行完毕,再shutdown。如果在调用shutdown()和线程池真正shutdown之间提交任务,会拒绝新任务线程池会调用rejectedExecutionHandler来处理这个任务。如果没有设置默认是AbortPolicy,会抛出异常。拒绝策略有如下几种:

    1. AbortPolicy 丢弃任务,抛运行时异常。
    2. CallerRunsPolicy 执行任务。
    3. DiscardPolicy 忽视,什么都不会发生。
    4. DiscardOldestPolicy 从队列中踢出最先进入队列(最后一个执行)的任务。

[转载]Java多线程——创建线程池的几个核心构造参数相关推荐

  1. Java多线程之线程池7大参数、底层工作原理、拒绝策略详解

    Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...

  2. Java多线程之线程池详解

    Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...

  3. java 多线程使用线程池_Java多线程:如何开始使用线程

    java 多线程使用线程池 什么是线程? (What is a Thread?) A thread is a lightweight process. Any process can have mul ...

  4. java多线程之线程池简介

    前言 池化技术已经屡见不鲜了,比如数据库连接池,大家的项目中应该也用到了线程池.池化技术的好处:降低资源的消耗,提高响应速度,提高线程的可管理性.本篇主要是和大家一起分析下线程池的架构和它的工作流程. ...

  5. java多线程及线程池使用

    Java多线程及线程池的使用 Java多线程 一.Java多线程涉及的包和类 二.Java创建多线程的方式 三.Java线程池 1. 创建线程池ThreadPoolExecutor的7个参数 2. 线 ...

  6. JAVA中创建线程池的五种方法及比较

    之前写过JAVA中创建线程的三种方法及比较.这次来说说线程池. JAVA中创建线程池主要有两类方法,一类是通过Executors工厂类提供的方法,该类提供了4种不同的线程池可供使用.另一类是通过Thr ...

  7. Java多线程之线程池配置合理线程数

    Java多线程之线程池配置合理线程数 目录 代码查看公司服务器或阿里云是几核的 合理线程数配置之CPU密集型 合理线程数配置之IO密集型 1. 代码查看公司服务器或阿里云是几核的 要合理配置线程数首先 ...

  8. Java多线程之线程池的手写改造和拒绝策略

    Java多线程之线程池的手写改造和拒绝策略 目录 自定义线程池的使用 四种拒绝策略代码体现 1. 自定义线程池的使用 自定义线程池(拒绝策略默认AbortPolicy) public class My ...

  9. java 多线程和线程池

    ● 多线程 多线程的概念很好理解就是多条线程同时存在,但要用好多线程确不容易,涉及到多线程间通信,多线程共用一个资源等诸多问题. 使用多线程的优缺点: 优点: 1)适当的提高程序的执行效率(多个线程同 ...

  10. Java 多线程:线程池实现原理

    前言 我们都知道,所谓线程池,那么就是相当于有一个池子,线程就放在这个池子中进行重复利用,能够减去了线程的创建和销毁所带来的代价.但是这样并不能很好的解释线程池的原理,下面从代码的角度分析一下线程池的 ...

最新文章

  1. hive的用户和用户权限
  2. (HY000): Cannot modify @@session.sql_log_bin inside a transaction
  3. python执行文件函数,python如何运行函数
  4. BugkuCTF-WEB题文件上传
  5. go json数据出现unicode_Golang处理JSON(一) 序列化
  6. npm notice created a lockfile as package-lock.json. You should commit this file.
  7. redhat5.4上安装oracle9i
  8. Win7缺失dll文件如何修复?Win7计算机丢失dll文件怎么办
  9. 【董天一】什么是IPFS(三)
  10. onenote 无法正常使用的解决办法
  11. 什么是数字图书馆——What is Digital Library?
  12. 7种超轻量级的Linux发行版,希望能够帮助你找到适合自己的操作系统
  13. 还只会用小黄鸭解压?看来你不是一个时髦的程序员!
  14. 班级奖学金管理系统java_(奖学金评定管理系统设计)(最终版)
  15. Java项目中利用钉钉机器人Webhook向钉钉群推送告警通知
  16. python出错 unexpected keyword argument 'categories'
  17. 编程中的逻辑实现,三种逻辑结构(顺序、循环、分支)、跳转、函数以及错误处理
  18. 自己动手实现音乐播放器app
  19. mysql locate和instr_Mysql函数instr、locate、position VS like
  20. 刘德华--9风雨人生路

热门文章

  1. 1006 换个格式输出整数 (15 分)—PAT (Basic Level) Practice (中文)
  2. L1-014 简单题 (5 分)—团体程序设计天梯赛
  3. 访问javaweb服务器sessionid存放问题
  4. ORACLE功能GREATEST功能说明具体实例
  5. win7 64位共享打印机
  6. 在php中使用Memcache
  7. VBA实战技巧精粹013:宏代码保存工作簿的3种方法
  8. php 图像居中裁剪函数,PHP 实现的自定义图像居中裁剪函数示例
  9. db2 teradata mysql_DB2 DPF VS Teradata选型对比?
  10. Security+ 学习笔记47 事件响应方案