线程池7个参数
线程池
什么是线程池?
线程池就是一个可以复用线程的技术。
不使用线程池的问题
如果用户每发起一个请求,后台就创建一个新线程来处理,下次新任务来了又要创建新线程,而创建新线程的开销是很大的,这样会严重影响系统的性能。
JDK 5.0起提供了代表线程池的接口:ExecutorService
如何得到线程池对象
方式一:使用ExecutorService的实现类ThreadPoolExecutor自创建一个线程池对象

方式二:使用Executors(线程池的工具类)调用方法返回不同特点的线程池对象
ThreadPoolExecutor构造器的参数说明
public ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler )
参数一:指定线程池的线程数量(核心线程): corePoolSize 不能小于0 这些线程是不会死的 一直都在的线程
参数二:指定线程池可支持的最大线程数: maximumPoolSize 最大数量 >= 核心线程数量。多出的线程是临时工 处理完是要销毁的
参数三:指定临时线程的最大存活时间: keepAliveTime 不能小于0
参数四:指定存活时间的单位(秒、分、时、天): unit 时间单位
参数五:指定任务队列: workQueue 不能为null (可以 处理任务接口:runnable callable)
参数六:指定用哪个线程工厂创建线程: threadFactory 不能为null
参数七:指定线程忙,任务满的时候,新任务来了怎么办: handler 不能为null
线程池常见面试题
临时线程什么时候创建啊?
新任务提交时发现核心线程都在忙,任务队列也满了,并且还可以创建临时线程,此时才会创建临时线程。
什么时候会开始拒绝任务?
核心线程和临时线程都在忙,任务队列也满了,新的任务过来的时候才会开始任务拒绝。
ThreadPoolExecutor创建线程池对象示例
ExecutorService pool = new ThreadPoolExecutor(
3,
5 ,
6,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(5) ,
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy()
);
ExecutorService的常用方法

新任务拒绝策略

浙公网安备 33010602011771号