学习笔记(34):Java并发编程精讲-线程池的创建和常用参数分析

立即学习:https://edu.csdn.net/course/play/26270/326867?utm_source=blogtoedu

1.创建线程池的参数释义

  • corePoolSize核心线程数,保持在线程池中线程的数量
  • maximumPoolSize线程池允许的最大线程数
  • keepAliveTime/timeUnit线程池中线程空闲不被释放的最大时间,配合timeUnit使用,为0表示永远不被释放。
  • workQueue BlockingQueue <Runnable>,工作线程任务的阻塞队列,用来存放等待执行的任务,默认实现:LinkedBlockingQueue
  • threadFactory线程池创建工厂,子类通过自定义实现接口"Thread newThread(Runnable r)"通过工厂创建线程池具体的Thread线程。默认实现:DefaultThreadFactory
  • handler(RejectedExecutionHandler)
    当workQueue无法存放新加任务,或添加新任务后线程池停止工作,使用设置的拒绝策略拒绝新加任务的执行,可以用rejectedExecution来实现自己的拒绝策略。
    默认拒绝策略:AbortPolicy,直接抛出异常

java中默认提供四种拒绝策略

  1. CallerRunsPolicy:调用方执行策略,当前调用线程或添加任务的线程执行,这种方式当线程池无法执行时,使用调用方资源来执行任务
  2. AbortPolicy:异常策略,直接抛出RejectedExecutionException异常
  3. DiscardPolicy:直接抛弃策略,对任务不做任何事情忽略该任务,不执行不报错
  4. DiscardOldestPolicy:抛弃最早任务策略,将workQueue的一个任务取出抛弃,将当前任务放入workQueue中执行

2.线程池状态分析

  1. RUNNING:初始状态,运行中
  2. SHUTDOWN:关闭状态,shutdown()方法后变为该状态,不再接受新任务,仍处理已添加任务
  3. STOP:停止状态,调用shutdownNow()方法后会从RUNNING状态进入到这个状态,此时不接受新任务,并且会将执行中的线程中断
  4. TIDYING:整理状态,此时队列中任务数量已经是0
  5. TERMINATED:终结状态,由TIDYING状态后调用terminated)后进入该状态

发布了73 篇原创文章 · 获赞 3 · 访问量 688

猜你喜欢

转载自blog.csdn.net/weixin_43186090/article/details/104285899