计算机系统应用教程网站

网站首页 > 技术文章 正文

创建线程池参数有哪些作用? 创建线程池的7个参数

btikc 2024-10-22 10:32:33 技术文章 11 ℃ 0 评论
public ThreadPoolExecutor( int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler)

1.corePoolSize:核心线程池大小,当提交一个任务时,线程池会创建一个线程来执行任务、即使其他空闲的核心线程能够执行新任务也会创建,等待需要执行的任务数大于线程核心大小就不会继续创建。

2 maximumPoolSize:线程池最大数,允许创建的最大线程数,如果队列满了,并且已经创建的线程数小于最大线程数,则会创建新的线程执行任务。如果是无界队列,这个参数基本没用。

3.keep AliveTime:线程保持活动时间,线程池工作线程空闲后,保持存活的时间,所以如果任务很多,并且每个任务执行时间较短,可以调大时间,提高线程利用率。

4.unit: 线程保持活动时间单位,天(DAYS)、小时(HOURS)、分钟(MINLTES、毫秒MILLISECONDS)、微秒(MICROSECONDS)、纳秒(NANOSECONDS)

5.workQueue:任务队列、保存等待执行的任务的阻塞队列。

一般来说可以选择如下阻塞队列

ArrayBlockingQueue:基于数组的有界阻塞队列。

LinkedBlockingQueue:基于链表的阻塞队列。

SynchronizedQueue:一个不存储元素的阻塞队列。

PriorityBlockingQueue:一个具有优先级的阻塞队列。

6.threadFactory:设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程设置更有意义的名字。

7. handler:饱和策略也叫拒绝策略。当队列和线程池都满了,即达到饱和状态。所以需要采取策略来处理新的任务。默认策略是Abort Policy。

AbortPolicy:真接抛出异常。

CallerRunsPolicy:调用者所在的线程来运行任务。

DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务。

DiscardPolicy:不处理,直接丢掉。

当然可以根据自己的应用场景,实现Rejected ExecutionHandler接口自定义策略。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表