线程池的创建使用

线程池的构造方法

ThreadPoolExecutor
(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,RejectedExecutionHandler handler)

1.corePoolSize 表示线程池的大小
如果调用了线程池的prestartAllCoreThreads方法,线程池会提前创建并启动所有基本线程。

2. maximumPoolSize 线程池最大大小

3.keepAliveTime 线程的存活时间

4.TimeUnit 线程活动保持的时间单位

55.workQueue 表示任务队列 用于保存等待执行的任务的阻塞队列 常见的几种队列

a.ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。
b.LinkedBlockingQueue:一个基于链表结构的阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列
c.SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法Executors.newCachedThreadPool使用了这个队列。
d.PriorityBlockingQueue:一个具有优先级的无限阻塞队列。

6.ThreadFactory 工厂,用于设置创建线程的工厂。

7.RejectedExecutionHandler(饱和策略):当队列和线程池都满了,说明线程池处于饱和状态,那么必须采取一种策略处理提交的新任务
常见的策略
a.AbortPolicy:直接抛出异常。
b.CallerRunsPolicy:只用调用者所在线程来运行任务。
c.DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务。
d.DiscardPolicy:不处理,丢弃掉

8.常见的自定义线程
Executors.newCachedThreadPool()(无界线程池,可以进行自动线程回收)
Executors.newFixedThreadPool(int)(固定大小线程池)
Executors.newSingleThreadExecutor()(单个后台线程)

人这辈子没法做太多事情,所以每做一件事都要做到精彩绝伦。 因为,这就是我的宿命。人生苦短,你明白吗? 所以这是我为人生做出的选择
原文地址:https://www.cnblogs.com/junjun1578/p/14756823.html