加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 业界 > 正文

我国85%量子领域相关企业新增于5年内

发布时间:2021-01-31 17:49:52 所属栏目:业界 来源:互联网
导读:7.3 常见线程池 罗列几种常见的线程池创建方式。 1.Executors.newFixedThreadPool 定长的线程池,有核心线程,核心线程的即为最大的线程数量,没有非核心线程。 使用的无界的等待队列是LinkedBlockingQueue。使用时候小心堵满等待队列。 2.Executors.newSing

7.3 常见线程池

罗列几种常见的线程池创建方式。

1.Executors.newFixedThreadPool

定长的线程池,有核心线程,核心线程的即为最大的线程数量,没有非核心线程。 使用的无界的等待队列是LinkedBlockingQueue。使用时候小心堵满等待队列。

2.Executors.newSingleThreadExecutor

创建单个线程数的线程池,它可以保证先进先出的执行顺序

3.Executors.newCachedThreadPool

创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

4.Executors.newScheduledThreadPool

创建一个定长的线程池,而且支持定时的以及周期性的任务执行,支持定时及周期性任务执行

5.ThreadPoolExecutor

最原始跟常见的创建线程池的方式,它包含了 7 个参数、4种拒绝策略 可用。

7.4 线程池核心点
 

上面的这个流程几乎就跟JDK线程池的大致流程类似,其中7大参数:

  • 营业中的3个窗口对应核心线程池数:corePoolSize
  • 银行总的营业窗口数对应:maximumPoolSize
  • 打开的临时窗口在多少时间内无人办理则关闭对应:keepAliveTime
  • 临时窗口存货时间单位:TimeUnit
  • 银行里的等待座椅就是等待队列:BlockingQueue
  • threadFactory 该参数在JDK中是 线程工厂,用来创建线程对象,一般不会动。
  • 无法办理的时候银行给出的解决方法对应:RejectedExecutionHandler

当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize,如果还有任务到来就会采取任务拒绝策略,一般有四大拒绝策略:

  • ThreadPoolExecutor.AbortPolicy :丢弃任务,并抛出 RejectedExecutionException 异常。
  • ThreadPoolExecutor.CallerRunsPolicy:该任务被线程池拒绝,由调用 execute方法的线程执行该任务。
  • ThreadPoolExecutor.DiscardOldestPolicy :抛弃队列最前面的任务,然后重新尝试执行任务。
  • ThreadPoolExecutor.DiscardPolicy:丢弃任务,也不抛出异常。

7.2 正确创建方式

使用Executors创建线程池可能会导致OOM。原因在于线程池中的BlockingQueue主要有两种实现,分别是ArrayBlockingQueue 和 LinkedBlockingQueue。

  • ArrayBlockingQueue 是一个用数组实现的有界阻塞队列,必须设置容量。

    (编辑:惠州站长网)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读