线程池几个核心参数
corePoolSize:核心线程数量大小。maximumPoolSize:线程池最大容纳线程数。keepAliveTime:线程空闲后的存活时长。TimeUnit:单位时间。BlockingQueue:缓存异步任务的队列。 ThreadFactory :用来构造线程池里的worker线程。RejectedExecutionHandler:线程池任务满载后采取的任务拒绝策略。
核心参数说明
1、当线程池中线程数量小于 corePoolSize 则创建线程,并处理请求。
2、当线程池中线程数量大于等于corePoolSize时,则把请求放入workQueue中,随着线程池中的核心线程们不断执行任务,只要线程池中有空闲的核心线程,线程池就从 workQueue中取任务并处理。
3 、当workQueue已存满,放不下新任务时则新建非核心线程入池,并处理请求直到线程数目达到maximumPoolSize(最大线程数量设置值)。
4、如果线程池中线程数大于maximumPoolSize则使RejectedExecutionHandler来进行任务拒绝处理。
线程池大小分配线程池究竟设置多大要看你的线程池执行的什么任务了,CPU密集型、IO密集型、混合型,任务类型不同,设置的方式也不一样。 任务一般分为:CPU密集型、IO密集型、混合型,对于不同类型的任务需要分配不同大小的线程池。
1、CPU密集型 尽量使用较小的线程池,一般Cpu核心数+1。
2、IO密集型
方法一可以使用较大的线程池,一般CPU核心数 * 2
方法二:(线程等待时间与线程CPU时间之比 + 1)* CPU数目。3、混合型 可以将任务分为CPU密集型和IO密集型,然后分别使用不同的线程池去处理,按情况而定。