线程池七大核心参数

如题所述

线程池七大核心参数是corePoolSize、maximumPoolSize、KeepAliveTime、unit、workQueue、threadFactory、handler。

1、corePoolSize核心线程数

线程池中会维护一个最小的线程数量,即使这些线程处理空闲状态,它们也不会被销毁,除非设置了alowCoreThreadTimeOut,这里的最小线程数量即是corePoolSize,任务提交到线程池后,首先会检查当前线程数是否达到了corePoolSize,如果没有达到的话,则会创建个新线程来处理这个任务。

2、maximumPoolSize最大线程数

当前线程数达到corePoolSize后,如果继续有任务被提交到线程池,会将任务缓存到任务队列中。如果队列也已满,则会去创建一个新线程来出来这个处理。线程池不会无限制的去创建新线程,它会有一个最大线程数量的限制,这个数量即由maximunPoolSize指定。

3、KeepAliveTime空闲线程存活时间

一个线程如果处于空闲状态,并且当前的线程数量大于corePolSize,那么在指定时间后,这个空闲线程会被销毁,这里的指定时间由keepAliveTime来设定。

4、unit空闲线程存活时间单位

keepAliveTime的计量单位。

5、workQueue任务队列

新任务被提交后,会先进入到此任务队列中,任务调度时再从队列中取出任务。

6、threadFactory线程工厂

创建一个新线程时使用的工厂,可以用来设定线程名、是否为daemon线程等等。

7、handler拒绝策略

当工作队列中的任务已到达最大限制,并且线程池中的线程数量也达到最大限制,这时如果有新任务提交进来,该如何处理呢?这里的拒绝策略,就是解决这个问题的。

线程池的模式介绍:

1、半同步/半异步模式又称为生产者消费者模式,是比较常见的实现方式,比较简单。分为同步层、队列层、异步层三层。同步层的主线程处理工作任务并存入工作队列,工作线程从工作队列取出任务进行处理,如果工作队列为空,则取不到任务的工作线程进入挂起状态。由于线程间有数据通信,因此不适于大数据量交换的场合。

2、领导者跟随者模式,在线程池中的线程可处在3种状态之一:领导者leader、追随者follower或工作者processor。任何时刻线程池只有一个领导者线程。事件到达时,领导者线程负责消息分离,并从处于追随者线程中选出一个来当继任领导者,然后将自身设置为工作者状态去处置该事件。

处理完毕后工作者线程将自身的状态置为追随者。这一模式实现复杂,但避免了线程间交换任务数据,提高了CPUcache相似性。在ACE中,提供了领导者跟随者模式实现。

温馨提示:答案为网友推荐,仅供参考
相似回答