`

ExecutorService中几个兄弟说明

    博客分类:
  • JAVA
 
阅读更多
ThreadPoolExecutor
主要参数
int corePoolSize
int maximumPoolSize
long keepAliveTime //ideltime 当队列为空时的等待时间,如果超过该时间任然没有新任务,则退出当前线程
BlockingQueue<Runnable> workQueue
当新增一个任务时
如果当前任务数<corePoolSize 则新增一个thread,
如果当前执行线程数>maximumPoolSize,否则加入到workQueue中
FixedThreadPool
corePoolSize=maximumPoolSize
使用LinkedBlockingQueue 无界,缓冲队列
无等待(idel)时间,如果队列为空立即返回
数目固定的线程池,当到达coresize后不会销毁,一直等待
使用问题:
固定的线程数,当有大量任务时,queue可能导致oom
 
cachedThreadPool
最小线程数0,最大线程数Integer.MAX
使用SynchronousQueue 无界 无缓冲 等待队列
元素添加后必须等待其被取出才能继续放入(可以认为缓存值为1的阻塞队列)
当某个线程60秒未被使用则移除,(图一中workQueue.poll等待60秒,超时返回null,则图2中的循环退出,相应worker结束
使用问题:
当前面线程没有结束时,会一直创建新线程一直到Integer.MAX,然后queue进入等待
一般情况线程数太多会句柄溢出,内存溢出
线程池伸缩会很厉害,极限范围0—Integer.MAX
适用于快速失败的情况


 
忽略allowCoreThreadTimeOut(默认false)
如果当前执行线程<=corePoolSize 则会触发queue.take() 一直阻塞(也既是说,当执行线程数小于core线程数时,不会再关闭线程,而是等待)


 
总结ThreadPoolExecutor
新任务先进worker线程工作,当所有worker都在忙,且不能新建worker(当前线程数=maximumPoolSize)时,放入queue,等某个线程空了,自动从queue中获取,继续执行,如果queue为空,则判断(当前线程数<=corePoolSize),成立,则一直等待,否则则等待keepAliveTime后销毁该线程
  • 大小: 157.8 KB
  • 大小: 80.6 KB
分享到:
评论

相关推荐

    在spring boot中使用java线程池ExecutorService的讲解

    使用线程池可以带来以下几个好处: 1. 降低系统资源的开销:创建和销毁线程需要占用系统资源,使用线程池可以避免这些开销。 2. 提高系统的性能:线程池可以重复使用已经创建的线程,避免了频繁地创建和销毁线程,...

    ExecutorService方法案例文件.zip

    ExecutorService方法案例文件.zip

    ExecutorService线程池

    ExecutorService线程池是Java并发编程中的核心组件,它位于`java.util.concurrent`包下,是`java.util.concurrent.Executor`接口的一个实现。ExecutorService提供了一种管理线程的方式,允许我们创建、管理和控制...

    ExecutorService与CompletionService对比详解.docx

    ExecutorService 和 CompletionService 是Java并发处理中的两种工具,它们用于管理和执行多个任务。ExecutorService 是一个接口,它是java.util.concurrent.Executor 接口的扩展,提供了一组方法来管理和控制线程池...

    ExecutorService的execute和submit方法

    在Java多线程编程中,`ExecutorService`是线程池的核心接口,它提供了一种管理线程的方式,包括创建线程、调度线程执行以及控制线程的生命周期。`ExecutorService`通过`execute()`和`submit()`这两个方法来提交任务...

    ExecutorService用法详解.doc

    接口 java.util.concurrent.ExecutorService 表述了异步执行的机制,并且...壹個 ExecutorService 实例因此特别像壹個线程池。事实上,在 java.util.concurrent 包中的 ExecutorService 的实现就是壹個线程池的实现。

    Executor,Executors,ExecutorService比较.docx

    在这个例子中,`ExecutorService`被用来提交一个计算任务,`submit()`返回的`Future`对象用于获取任务的执行结果。 总结来说,`Executor`定义了任务执行的基本行为,`Executors`是创建线程池的工厂,而`...

    ExecutorService.shutdown()应该是在线程执行完毕后,才会去关闭

    在Java多线程编程中,`ExecutorService`是线程池的一个重要接口,它提供了管理和控制线程执行的能力。当我们创建一个`ExecutorService`实例并提交任务时,我们可以通过调用`shutdown()`方法来关闭线程池。然而,标题...

    java ExecutorService使用方法详解

    Java中的`ExecutorService`是Java并发编程的重要组成部分,它提供了线程池的管理,使得开发者可以更有效地控制并发任务的执行。在Java的`java.util.concurrent`包中,`ExecutorService`接口作为线程池的核心接口,...

    ExecutorService10个要诀和技巧编程开发技术

    ExecutorService10个要诀和技巧编程开发技术共9页.pdf.zip

    详解JDK中ExecutorService与Callable和Future对线程的支持

    Java并发编程中的ExecutorService、Callable和Future ...在实际应用中,我们可以使用ExecutorService、Callable和Future来实现各种并发编程任务,如统计某个盘子的大小、统计多个盘子的总大小、实现高效的数据处理等。

    运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接JAVA语言

    运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接

    详解Java利用ExecutorService实现同步执行大量线程

    此外,ExecutorService提供了Future对象来获取Callable任务的执行结果,但在这个例子中我们没有使用这个功能。 总结来说,Java的ExecutorService提供了一种强大而灵活的线程管理方式,可以有效地处理大量并发任务,...

    java线程池工具--ExecutorService,简单例子

    NULL 博文链接:https://x125858805.iteye.com/blog/2191873

    2_ExecutorService源码阅读1

    虽然这个方法在给定的描述中没有提到,但它是 Executor 接口的一个方法,ExecutorService 继承自 Executor。execute() 方法用于执行给定的 Runnable 任务,它是提交任务的基础方法,submit() 实际上也是通过 execute...

    Java使用ExecutorService来停止线程服务

    Java 中的 ExecutorService 是一个非常强大的线程池管理工具,它提供了多种方式来停止线程服务。今天,我们将详细介绍如何使用 ExecutorService 来停止线程服务。 首先,我们需要了解 ExecutorService 的两个关闭...

    java中Executor,ExecutorService,ThreadPoolExecutor详解

    主要介绍了java中Executor,ExecutorService,ThreadPoolExecutor详解的相关资料,需要的朋友可以参考下

    Java 线程池ExecutorService详解及实例代码

    Java线程池ExecutorService是Java并发编程中非常重要的一个组件,它通过管理和复用线程资源,有效地控制并发任务的执行,从而提高系统的性能和稳定性。本文将详细讲解ExecutorService的原理、使用场景以及如何通过...

    java并发编程:Executor、Executors、ExecutorService.docx

    - `newSingleThreadExecutor()`:创建单线程的ExecutorService,所有任务都在同一个线程中顺序执行。 - `newCachedThreadPool()`:创建一个可缓存的线程池,如果线程池为空,将创建新线程,如果线程空闲时间过长,...

    2011.08.30(2)——— java BlockingQueue ExecutorService

    标题 "2011.08.30(2)——— java BlockingQueue ExecutorService" 涉及到Java并发编程中的两个核心组件:BlockingQueue(阻塞队列)和ExecutorService。这篇博客可能深入探讨了如何使用这两个工具来优化多线程环境...

Global site tag (gtag.js) - Google Analytics