Java线程池ThreadPoolExecutor是干什么的

当我们需要实现并发、异步等操作时,可以使用ThreadPoolExecutor。

ThreadPoolExecutor

线程池:

系统中,我们创建(extend Thread/implement Runnable)、销毁(正常run方法完成后线程终止)线程的代价是比较高昂的。
如果频繁地创建和销毁进程,会大大降低系统运行效率和吞吐量。
线程池使得线程可以被复用,避免了线程频繁创建和销毁的开销,提高系统的运行效率和吞吐量。
在这里插入图片描述

实例

ThreadPoolExecutor.execute(new Runnable () {});

相关概念:

Task任务:new Runnable () {}
任务就是一个Runnable的对象,任务的执行方法就是该对象的run方法。

缓冲队列:workQueue

一个阻塞队列。

BlockingQueue<Runnable> workQueue;

corePoolSize:核心线程数
核心线程会一直存活,即使没有任务需要执行。
当线程数小于核心线程数时(还未满,就会一直增),即使有线程空闲,线程池也会优先创建新线程处理。

maxPoolSize:最大线程数
当线程数大于corePoolSize,且任务队列已满时。线程池会创建新线程来处理任务,直到线程数量达到maxPoolSize。

execute(Runnable)

通过execute将一个任务交由线程池管理。

当一个任务通过execute方法欲添加到线程池时,线程池采用的策略如下(即添加任务的策略):

扫描二维码关注公众号,回复: 11641400 查看本文章

1、如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。

2、如果此时线程池中的数量等于corePoolSize,但是缓冲队列workQueue未满,那么任务被放入缓冲队列。

3、如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。

4、如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过handler所指定的策略来处理此任务。

如下图:
在这里插入图片描述
接下来有时间的话我会补充上对ThreadPoolExecutor源码部分的理解。

这里介绍了线程池的基本作用,若想对ThreadPoolExecutor有更详细的了解,可以阅读这篇非常好的文章:用ThreadPoolExecutor/ThreadPoolTaskExecutor…

猜你喜欢

转载自blog.csdn.net/qq_35549286/article/details/107918510