JUC学习-22-浅谈线程池参数&原理

JUC学习-22-浅谈线程池参数&原理

   public ThreadPoolExecutor(int corePoolSize,
							  int maximumPoolSize,
							  long keepAliveTime,
							  TimeUnit unit,
							  BlockingQueue<Runnable> workQueue) {
		this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
			 Executors.defaultThreadFactory(), defaultHandler);
	}

参数1:int corePoolSize 核心线程数

参数2:int maximumPoolSize 最大线程数

参数3:long keepAliveTime 非核心线程空闲状态的存活时间

参数4:TimeUnit unit <span c时间单位(天、小时、分钟...) 用于配合第三个参数的

参数5:BlockingQueue workQueue 工作队列(阻塞队列)

参数6:ThreadFactory threadFactory 线程工厂

参数7:RejectedExecutionHandler handler 拒绝策略(AbortPolice 丢弃任务并抛出异常;DiscardPolice 丢弃任务但不抛出异常; DiscardOldestPolice 丢弃队列最前面的任务,然后尝试重新将任务加入到队列末尾,一直重复此过程;CallerRunsPolice 由调用线程处理该任务)

eg:

创建线程池,核心线程数(corePoolSize)10,工作队列(workQueue)长度10,最大线程数(maxmumPoolSize)。Execute执行30个任务 需要30个线程, 此时:

1、先创建10个核心线程 (任务 1 - 10)

2、10个线程放入到工作队列中 (任务 11 - 20)

3、根据最大核心线程数,创建10个非核心线程 (任务 1-21 - 30)

4、执行顺序: 先执行核心线程 (任务 1 - 10); 再执行 非核心线程 (任务 21 - 30); 再执行工作队列中的线程(任务 11 - 20)


image

posted @ 2025-07-28 16:09  skystrivegao  阅读(11)  评论(0)    收藏  举报