线程池都有哪些核心配置参数?

摘要:
maximumPoolSize表示线程池中能同时执行的最大线程数量。这个值必须大于等于corePoolSize,如果这两个值相等,那就是固定大小的线程池keepAliveTime表示线程池中除常驻核心线程之外的其他线程的空闲时间,如果超过这个时间就会销毁。queue缓存队列,当请求的线程数大于corePoolSize的时候,线程会进入队列进行阻塞。当这个队列达到上限之后,线程池会创建新的线程,直到到吗maximumPoolSize大小位置。当queue满了之后,并行活动的线程数大于maximunPoolSize的时候,线程池通过改策略处理请求。

corePoolSize

表示常驻核心线程数量。

maximumPoolSize

表示线程池中能同时执行的最大线程数量。这个值必须大于等于corePoolSize,如果这两个值相等,那就是固定大小的线程池

keepAliveTime

表示线程池中除常驻核心线程之外的其他线程的空闲时间,如果超过这个时间就会销毁。

queue

缓存队列,当请求的线程数大于corePoolSize的时候,线程会进入队列进行阻塞。当这个队列达到上限之后,线程池会创建新的线程,直到到吗maximumPoolSize大小位置。

RejectedExecutionHandler

表示拒绝策略。当queue满了之后,并行活动的线程数大于maximunPoolSize的时候,线程池通过改策略处理请求。

其中RejectedExcutionHandler默认包含四种策略:

AbortPolicy(默认)丢弃这个任务并抛出 RejectedExecutionException异常
DiscardPolicy丢弃掉这个任务,但是不抛出异常
DiscardOldestPolicy抛弃掉在队列中等待最久的任务,然后把当前任务加入队列中
CallerRunsPolicy调用任务的run()方法绕过线程池直接执行

另外还支持自定义模式。

public class UserRejectedHandler implements RejectedExecutionHandler {
    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
        System.out.println("处理逻辑");
    }
}

threadFactory

表示线程工厂。他用来生产一组相同任务的线程。

免责声明:文章转载自《线程池都有哪些核心配置参数?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇自学Zabbix8.1 Regular expressions 正则表达式NFS挂载Android文件系统下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js与Nodejs的单线程和异步--初探

Event Loop Event Loop : 浏览器使用 Event Loop 来协调 DOM 事件、UI 渲染、脚本执行和网络事件等。 Task Queue (Event Queue) :每当 DOM 事件、计时器事件或者网络事件被触发时,它们的回调函数和 Context 都会被压入 Event Queue,而 Event Loop 则会从中取出...

Jdk1.8 JUC源码解析(1)-atomic-AtomicXXX

目录     一、Unsafe简介 在正式的开讲 juc-atomic框架系列之前,有必要先来了解下Java中的Unsafe类。 Unsafe类,来源于sun.misc包。该类封装了许多类似指针操作,可以直接进行内存管理、操纵对象、阻塞/唤醒线程等操作。Java本身不直接支持指针的操作,所以这也是该类命名为Unsafe的原因之一。 J.U.C中的许多CA...

【转】DELPHI 线程类

原文地址:http://yyimen.blog.163.com/blog/static/179784047201211811178223/ Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchronize的用法就...

精选30道Java多线程面试题

1、线程和进程的区别  进程是应用程序的执行实例。比如说,当你双击的Microsoft Word的图标,你就开始运行的Word的进程。线程是执行进程中的路径。另外,一个过程可以包含多个线程。启动Word时,操作系统创建一个进程并开始执行该进程的主线程。 由于一个进程可以由多个线程,线程可以被认为是“轻量级”的过程。因此,一个线程和一个进程之间的本质区别在于...

利用C#线程窗口调试多线程程序

       从网上的资料判断,调试多线程程序似乎就一下3种方法。 1、在日志的某个地方写日志文件。 优点:不会干扰程序的执行,特别是对网络的多线程通信。 缺点:每次都需要打开日志文件以查看进程运行的信息。 2、利用断点进行调试。 优点:直观,可以直接看到运行过程的值 缺点:在多个线程设置断点,可能让程序跳来跳去,还需要额外地分出一部分精力用来理清程序...

封装GCD以及介绍如何使用

源码地址 http://pan.baidu.com/s/1zTUR8 研究GCD有一段时间,翻译了多篇文章,找了很多的资料,看了很多官方文档,看起来很难,实际上很简单,本人一一进行讲解怎么使用. 支持ARC以及非ARC,无论在ARC环境还是在非ARC环境,都需要调用dispatchRelease方法来释放init出的GCDGroup,GCDQueue,G...