什么是线程池:
线程池是一种多线程处理方法,帮我们管理线程,避免创建大量的线程增加服务器压力。
线程池的优点:
1.提高响应速度,可以提前启动所有的核心线程,任务过来就可以直接执行了。
2.降低资源消耗,不用频繁的创建和销毁线程
3.提高线程的可管理性
线程池的构造方法:
创建线程池需要使用ThreadPoolExecutor类,它的构造方法参数如下:
public ThreadPoolExecutor(int corePoolSize,核心线程数量
int maximumPoolSize,最大线程数量
long keepAliveTime,超过核心线程数量的线程,把任务执行结束后,
达到指定的时间后会回收超过核心线程数量的线程
TimeUnit unit,存活时间的单位
BlockingQueue<Runnable> workQueue,保持待执行的队列
ThreadFactory threadFactory,创建新线程使用的工厂
RejectedExecutionHandler handler);当任务无法执行时的处理器
线程池的执行过程 :
线程池执行任务的基本过程:
1.每过来一个任务,就启动一个核心线程,去执行任务
2.如果核心线程都用完了,再过来任务,存入阻塞队列
3.如果阻塞对了也存满了,再过来任务,可以再启动线程,直到最大线程数量。
4.如果达到了最大线程数量,再过来任务,启动拒接策略。
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class work {
public static void main(String[] args) {
//核心线程数
int corePoolSize = 3;
//最大线程数
int maximumPoolSize = 6;
//超过 corePoolSize 线程数量的线程最大空闲时间
long keepAliveTime = 2;
//以秒为时间单位
TimeUnit unit = TimeUnit.SECONDS;
//创建工作队列,用于存放提交的等待执行任务
BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<Runnable&g