线程池说明

一、什么是线程池

线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runnable或Callable接口的实例对象。

线程池的优点: 降低资源消耗、提高响应速度、方便管理;线程可以复用、可以控制最大并发数、可以管理线程

二、创建线程池的方式

  • 1 Executors.newSingleThreadExecutor();
  • 创建一个单一的线程池
  • 2 Executors.newFixedThreadPool(int nThreads);
  • 创建一个固定大小的线程池,参数填线程池大小
  • 3 Executors.newCachedThreadPool();
  • 创建一个可伸缩的线程池,遇强则强,遇弱则弱

三、线程池的七大参数

参数 描述
int corePoolSize 核心线程池大小
int maximumPoolSize 最核心大线程池大小
long keepAliveTime 超时时间
TimeUnit unit 超时时间单位
BlockingQueue workQueue 阻塞队列
ThreadFactory threadFactory 线程工厂,创建线程的,一般不用动
RejectedExecutionHandler handler 拒绝策略

四、四种拒绝策略

拒绝策略 描述
new ThreadPoolExecutor.AbortPolicy() 线程池默认拒绝策略,如果元素添加到线程池失败,会抛出RejectedExecutionException异常
new ThreadPoolExecutor.CallerRunsPolicy() 如果添加失败,那么主线程会自己调用执行器中的execute方法来执行任务
new ThreadPoolExecutor.DiscardPolicy() 如果添加失败,则放弃,不会抛出异常
new ThreadPoolExecutor.DiscardOldestPolicy() 如果添加到线程池失败,会将队列中最早添加的元素移除,再尝试添加,如果失败则按该策略不断重试

猜你喜欢

转载自blog.csdn.net/xmbcc777/article/details/130945044