重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
线程池技术在并发时经常会使用到,java中的线程池的使用是通过调用ThreadPoolExecutor来实现的。ThreadPoolExecutor提供了四个构造函数,最后都会归结于下面这个构造方法:
创新互联公司专注于焉耆网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供焉耆营销型网站建设,焉耆网站制作、焉耆网页设计、焉耆网站官网定制、小程序设计服务,打造焉耆网络公司原创品牌,更为您提供焉耆网站排名全网营销落地服务。
// 七个参数的构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueueworkQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
这些参数的意义如下:
ThreadPoolExecutor工作流程
流程图如下:
大致过程陈述为:
线程池中使用的阻塞队列
阻塞队列常见的方法如下表所示:
方法名 | 说明 | 注意 |
---|---|---|
add | 增加一个元索 | 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 |
remove | 移除并返回队列头部的元素 | 如果队列为空,则抛出一个NoSuchElementException异常 |
element | 返回队列头部的元素 | 如果队列为空,则抛出一个NoSuchElementException异常 |
offer | 添加一个元素并返回true | 如果队列已满,则返回false |
poll | 移除并返问队列头部的元素 | 如果队列为空,则返回null |
peek | 返回队列头部的元素 | 如果队列为空,则返回null |
put | 添加一个元素 | 如果队列满,则阻塞 |
take | 移除并返回队列头部的元素 | 如果队列为空,则阻塞 |
常见四种线程池
线程池 | 使用的阻塞队列 | 线程池大小 | 超时 |
---|---|---|---|
CachedThreadPool | SynchronousQueue(队列长度无限 | 可增加,最大值Integer.MAX_VALUE | 默认60秒超时 |
FixedThreadPool | LinkedBlockingQueue(队列长度无限) | 可指定nThreads,固定数量 | 不会超时 |
newSingleThreadExecutor | LinkedBlockingQueue(队列长度无限), | 固定为1 | 不超时 |
newScheduledThreadPool | DelayedWorkQueue | 可增加,最大值Integer.MAX_VALUE | 不超时 |
它们通过Executors以静态方法的方式直接调用,实质上是它们最终调用的是ThreadPoolExecutor的构造方法,也就是本文最前面那段代码。
注:KeepAliveTime=0的话,表示不等待
《阿里巴巴java开发手册》中建议线程池不使用 Executors 去创建,而是通过 ThreadPoolExecutor的方式,这样的处理方式让写的人员更加明确线程池的运行规则,规避资源耗尽的风险。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。