概念:
线程池的流程
执行流程:
当我们设置第一个参数corePoolSize=5说明是核心线程为5个,当线程数超过核心线程数时会先放进LonkedBlockingDeque队列中,
MaxinumPoolSize指的是线程池最大的线程数,当LinkedBlockingDeque队列中数量已满时,才会在放进线程池中,此时线程池线程数量一定大于核心线程数。
KeepAliveTime指的是回收策略,当为线程执行谁先超过60s就回收一定程度上保持线程池的核心数量,前提是线程池中的线程数超过核心数量
LinkedBliockingDeque指的是队列,当线程池的核心线程数量达到时,会先存放进队列中等待核心线程执行完毕在进入线程,当队列也满时才会在放进线程池中。当线程池也满了就会执行BlockingQueue<Runnable> workBlocQueue拒绝策略。
BlockingQueue<Runnable> workBlocQueue:指的是拒绝策略,当核心线程池满了,队列也满了,线程池最大数量也满了就会拒绝在创建线程放进线程池。
代码演示:
package cn.lgy.thread; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * 使用线程池 */ public class ThreadText02 { static class TxThread implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName()+": 执行业务逻辑"); } } public static void main(String[] args) { // 创建一个线程池 ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
5,//参数 int corePoolSize
10,//参数 int maximulPoolSize 60l,//参数 Long KeepAliveTime TimeUnit.SECONDS,//参数TimeUnit unit new LinkedBlockingDeque<>(5));//参数 BlockingQueue<Runnable> workQueue for (int i = 0; i < 15; i++) { threadPoolExecutor.execute(new TxThread()); } threadPoolExecutor.shutdown(); } }