Java线程池

线程池核心参数

有7个核心参数

  1. 核心线程数
  2. 最大线程数
  3. 任务队列
  4. 线程空闲存活时间
  5. 线程空闲存活时间的单位
  6. 线程创建工厂
  7. 拒绝策略

任务提交流程

往线程池中提交任务流程如下:

  1. 判断线程池中线程数是否小于核心线程数,小于新建线程执行任务,否则进入步骤2
  2. 判断任务队列是否满了,没满任务添加到队列中,否则进入步骤3
  3. 判断线程池中线程是是否小于最大线程数,小于新建线程执行任务,否则按照拒绝策略拒绝任务


    任务提交流程

线程池状态

线程池有5种状态:

  • running(运行):新建线程池后的状态为running
  • shutdown(关闭):调用shutdown方法后,不接受新的任务,工作的线程继续执行,把队列中的任务执行完成,变成tidying
  • stop(停止):调用shutdownnow方法后,不在接受新的任务,中断正在工作的线程,队列中的任务不执行,变成tidying
  • tidying(整理)
  • terminated(终止):变成tidying状态之后,内部调用terminated方法


    状态流转

拒绝策略

有4种:

  1. 直接丢弃
  2. 直接拒绝,抛异常
  3. 交给应用线程执行
  4. 丢弃队列中最早的任务,然后重新提交

线程池的数量怎么确定

看场景是cpu密集型还是io密集型

  • cpu密集型:cpu核数
  • io密集型:2倍cpu核数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容