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后销毁该线程
相关推荐
使用线程池可以带来以下几个好处: 1. 降低系统资源的开销:创建和销毁线程需要占用系统资源,使用线程池可以避免这些开销。 2. 提高系统的性能:线程池可以重复使用已经创建的线程,避免了频繁地创建和销毁线程,...
ExecutorService方法案例文件.zip
ExecutorService线程池是Java并发编程中的核心组件,它位于`java.util.concurrent`包下,是`java.util.concurrent.Executor`接口的一个实现。ExecutorService提供了一种管理线程的方式,允许我们创建、管理和控制...
ExecutorService 和 CompletionService 是Java并发处理中的两种工具,它们用于管理和执行多个任务。ExecutorService 是一个接口,它是java.util.concurrent.Executor 接口的扩展,提供了一组方法来管理和控制线程池...
在Java多线程编程中,`ExecutorService`是线程池的核心接口,它提供了一种管理线程的方式,包括创建线程、调度线程执行以及控制线程的生命周期。`ExecutorService`通过`execute()`和`submit()`这两个方法来提交任务...
接口 java.util.concurrent.ExecutorService 表述了异步执行的机制,并且...壹個 ExecutorService 实例因此特别像壹個线程池。事实上,在 java.util.concurrent 包中的 ExecutorService 的实现就是壹個线程池的实现。
在这个例子中,`ExecutorService`被用来提交一个计算任务,`submit()`返回的`Future`对象用于获取任务的执行结果。 总结来说,`Executor`定义了任务执行的基本行为,`Executors`是创建线程池的工厂,而`...
在Java多线程编程中,`ExecutorService`是线程池的一个重要接口,它提供了管理和控制线程执行的能力。当我们创建一个`ExecutorService`实例并提交任务时,我们可以通过调用`shutdown()`方法来关闭线程池。然而,标题...
Java中的`ExecutorService`是Java并发编程的重要组成部分,它提供了线程池的管理,使得开发者可以更有效地控制并发任务的执行。在Java的`java.util.concurrent`包中,`ExecutorService`接口作为线程池的核心接口,...
ExecutorService10个要诀和技巧编程开发技术共9页.pdf.zip
Java并发编程中的ExecutorService、Callable和Future ...在实际应用中,我们可以使用ExecutorService、Callable和Future来实现各种并发编程任务,如统计某个盘子的大小、统计多个盘子的总大小、实现高效的数据处理等。
运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接
此外,ExecutorService提供了Future对象来获取Callable任务的执行结果,但在这个例子中我们没有使用这个功能。 总结来说,Java的ExecutorService提供了一种强大而灵活的线程管理方式,可以有效地处理大量并发任务,...
NULL 博文链接:https://x125858805.iteye.com/blog/2191873
虽然这个方法在给定的描述中没有提到,但它是 Executor 接口的一个方法,ExecutorService 继承自 Executor。execute() 方法用于执行给定的 Runnable 任务,它是提交任务的基础方法,submit() 实际上也是通过 execute...
Java 中的 ExecutorService 是一个非常强大的线程池管理工具,它提供了多种方式来停止线程服务。今天,我们将详细介绍如何使用 ExecutorService 来停止线程服务。 首先,我们需要了解 ExecutorService 的两个关闭...
主要介绍了java中Executor,ExecutorService,ThreadPoolExecutor详解的相关资料,需要的朋友可以参考下
Java线程池ExecutorService是Java并发编程中非常重要的一个组件,它通过管理和复用线程资源,有效地控制并发任务的执行,从而提高系统的性能和稳定性。本文将详细讲解ExecutorService的原理、使用场景以及如何通过...
- `newSingleThreadExecutor()`:创建单线程的ExecutorService,所有任务都在同一个线程中顺序执行。 - `newCachedThreadPool()`:创建一个可缓存的线程池,如果线程池为空,将创建新线程,如果线程空闲时间过长,...
标题 "2011.08.30(2)——— java BlockingQueue ExecutorService" 涉及到Java并发编程中的两个核心组件:BlockingQueue(阻塞队列)和ExecutorService。这篇博客可能深入探讨了如何使用这两个工具来优化多线程环境...