本文将讲解线程池参数、参数之间的关系以及线程池以一个怎么样的策略执行新增到线程池的线程,最后会举例常见的线程池是怎么样应用这些参数和流程的。文章较长,可以根据目录选择想看的知识,若有错误请指出。
1.线程池概述
线程池,顾名思义就是一个装线程的池子,池子里的线程可以重复理用,降低产生和销毁线程的开销。举个例子,没有线程池使用线程的时候,就像开水龙头洗手,每次洗手都需要开水龙头,洗完手水就会流进下水道。而线程池就像在水盆洗手,每次洗手只需要重复理用水盆的水就好了(手太脏的当我没说)。
2.线程池参数
先看个小例子:
ExecutorService executorService = new ThreadPoolExecutor(5, 5, 0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>(5),
new ThreadPoolExecutor.CallerRunsPolicy());
在这个例子里面,产生了一个线程池,点进去看一下构造方法:
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
RejectedExecution