线程池-基础篇

发布时间 2023-11-22 23:29:40作者: 轻寒

常用线程池

Executors提供四种线程池:

1.newCachedThreadPool :缓存线程池,如果线程池长度超过处理需要,可回收空闲线程,若无可回收,则新建线程。

2.newFixedThreadPool : 定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

3.newScheduledThreadPool : 计划线程池,支持定时及周期性任务执行。
4.newSingleThreadExecutor :单线程线程池,用唯一的线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行

核心参数

ThreadPoolExecutor有几个重要的成员变量:keepAliveTime(如果一个线程处在空闲状态的时间超过了该属性值,就会因为超时而退出)、allowCoreThreadTimeOut(是否允许核心线程超时退出)、poolSize(线程池中当前线程的数量)、corePoolSize(线程池的基本大小)、maximumPoolSize(线程池中允许的最大线程数)。

注意还有一个largestPoolSize,记录了曾经出现的最大线程个数。因为setMaximumPoolSize()可以改变最大线程数。

拒绝策略

1.ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
2.ThreadPoolExecutor.DiscardPolicy:丢弃任务,但是不抛出异常。
3.ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务
4.ThreadPoolExecutor.CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务