美文网首页
Java线程池

Java线程池

作者: jecyhw | 来源:发表于2024-06-22 10:53 被阅读0次

线程池核心参数

有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核数

相关文章

网友评论

      本文标题:Java线程池

      本文链接:https://www.haomeiwen.com/subject/mvbkcjtx.html