|
|
51CTO旗下网站
|
|
移动端

1.4.3 ThreadPoolExecutor

《Java多线程与Socket:实战微服务框架》第1章多线程基础,本书尽量采用简要和通俗易懂的方式来介绍多线程知识。本节为大家介绍ThreadPoolExecutor。

作者:庞永华来源:电子工业出版社|2019-03-26 15:48

1.4.3 ThreadPoolExecutor

Executors类使用ThreadPoolExecutor来创建线程池,比如:

  1. ExecutorService es = Executors.newCachedThreadPool();  
  2. // 等价于  
  3. ExecutorService es = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); 

因此,我们可以直接通过构造ThreadPoolExecutor的实例来创建自定义线程池。

ThreadPoolExecutor的构造函数较多,可用的参数如下。

. int corePoolSize:核心线程数,即最小线程数。

. int maximumPoolSize:***线程数。

. long keepAliveTime:线程***空闲时长。

. TimeUnit unit:keepAliveTime的时间单位,默认是TimeUnit.MILLISECONDS。

. BlockingQueue<Runnable> workQueue:任务队列,不同类型的线程池采用不同类型的队列,常用的有SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue。

. ThreadFactory threadFactory:threadFactory用于确定如何创建线程。一般用来决定线程是否为守护线程,并设置线程的分组、名称和优先级等属性。

. RejectedExecutionHandler handler:用于确定当线程池的大小达到上限、无可用的空闲线程,且队列已满时,要如何处理。

ThreadPoolExecutor线程池的执行规则比较复杂,取决于采用何种队列和拒绝策略。简单归纳如下:

. 线程数低于corePoolSize时总是创建新线程来执行任务。

. 线程数高于核心线程数(corePoolSize)且低于***线程数(maximumPoolSize)时,如果用的是SynchronousQueue这样的队列,将检查是否有空闲线程,有空闲线程则使用空闲线程来执行任务,反之则创建新线程来执行任务。如果使用LinkedBlockingQueue这样的队列,新任务将入队并排队等待执行。这意味着maximumPoolSize设置在这种情况下将变得无效,因为线程池的大小不可能超过corePoolSize。空余的线程(非核心线程)将在空闲超过keepAliveTime单位时间之后被回收。

. 线程数达到***线程数时,如果用的是SynchronousQueue这样的队列,则触发拒绝策略。反之,如果用的是LinkedBlockingQueue这样的队列,则会尝试将任务入队;如果队列已满,则执行拒绝策略。

注:SynchronousQueue是一种特殊的零长度阻塞队列。它的每次put ()操作必须等待一个take(),反之亦然。SynchronousQueue不支持peek(),也无法被遍历。


喜欢的朋友可以加入官方的读书群

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

网管员世界2007超值精华本

《网管员世界》是国内唯一一家专门面向网管员职业的刊物。本书是2006年《网管员世界》各期内容的汇集,内容权威、全面、时效性强,贴近应用...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客