线程池

线程池

什么是线程池
线程池是一种多线程处理形式,处理过程中将任务提交到线程池,任务的执行交由线程池来管理(执行多个线程的一个线程集合体

线程的作用
1、重用存在的线程,减少对象创建、消亡的开销,提升性能
2、可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞
3、提供定时执行、定期执行、单线程、并发数控制等功能
4、限制系统中执行线程的数量

Executors提供的四种常见线程池
线程池的顶级接口是Executor,但Executor并不是一个线程池,而只是一个执行线程的工具,真正的线程池接口是ExecutorService

  1. newCachedThreadPool():创建一个可缓存线程池 - 如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程
  2. newFixedThreadPool(int nThreads):创建一个定长线程池 - 可控制线程最大并发数,超出的线程会在队列中等待
  3. newScheduledThreadPool(int corePoolSize):创建一个定长线程池 - 支持定时及周期性任务执行
  4. newSingleThreadExecutor():创建一个单线程化的线程池 - 它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行

线程池中的常见队列

  1. ArrayBlockingQueue:一个基于数组结构的有界阻塞队列(有界队列),此队列按 FIFO(先进先出)原则对元素进行排序
  2. LinkedBlockingQueue:一个基于链表结构的阻塞队列(可设置容量队列),此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue。Executors.newFixedThreadPool()使用了这个队列
  3. SynchronousQueue:一个不存储元素的阻塞队列(同步队列),每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue。Executors.newCachedThreadPool使用了这个队列
  4. PriorityBlockingQueue:一个具有优先级的无限阻塞队列(优先级队列)
  5. DelayQueue:一个任务定时周期的延迟执行的队列(延迟队列),根据指定的执行时间从小到大排序,否则根据插入到队列的先后排序。newScheduledThreadPool线程池使用了这个队列。

线程池中的重要参数
1、corePoolSize:核心池的大小
2、maximumPoolSize:线程池最大线程数
3、keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止
4、unit:参数keepAliveTime的时间单位
5、workQueue:一个阻塞队列,用来存储等待执行的任务
6、threadFactory:用于设置创建线程的工厂
7、handler:表示当拒绝处理任务时的策略

有界队列和无界队列
无界队列与有界队列相比,除非系统资源耗尽,否则无界的任务队列不存在任务入队失败的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值