ThreadPoolExecutor_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > ThreadPoolExecutor

ThreadPoolExecutor

 2013/11/11 0:55:09  shisanshe  程序员俱乐部  我要评论(0)
  • 摘要:线程池的技术背景在面向对象编程中,创建和销毁一个线程是很费时间的,因为创建一个对象需要获取内存资源和其他更多资源。在java中更是如此,虚拟机将试图跟踪每一个对象,以便在对象销毁后进行垃圾回收。所以一个提高效率的办法是尽量减少对象的创建和销毁次数,特别是那些很费资源的对象。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因。ThreadPoolExecutor高度可定制的threadpooljava.util.concurrent
  • 标签:thread

线程池的技术背景

在面向对象编程中,创建和销毁一个线程 是很费时间的,因为创建一个对象需要获取内存资源和其他更多资源。在java中更是如此,虚拟机将试图跟踪每一个对象,以便在对象销毁后进行垃圾回收。所 以一个提高效率的办法是尽量减少对象的创建和销毁次数,特别是那些很费资源的对象。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因。

?

?

ThreadPoolExecutor

  • 高度可定制的 thread?pool
  • java.util.concurrent.ThreadPoolExecutor
  • corePoolSize: 线程池维护线程的最少数量
  • maximumPoolSize:线程池维护线程的最大数量
  • keepAliveTime: 线程池维护线程所允许的空闲时间
  • unit: 线程池维护线程所允许的空闲时间的单位
  • workQueue: 线程池所使用的缓冲队列
  • handler: 线程池对拒绝任务的处理策略

?

线程池的调用

  1. 如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
  2. 如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。
  3. 如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。
  4. 如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。也就是:处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。
  5. 当线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。

?

?

?

?

?

?

?

?

?

发表评论
用户名: 匿名