`
kingquake21
  • 浏览: 268982 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ThreadPoolExecutor的线程池控制策略

阅读更多

ThreadPoolExecutor有三个参数是用来管理内部池的大小,分别是corePoolSize,maximumPoolSize,workQueue

从源码可以看出,池控制的策略如下:

1. 如果当前池容量小于corePoolSize时,启动新的线程去执行command任务

2. 当前池容量大于corePoolSize,但是小于maximumPoolSize时,将任务加入到workQueue中,直至队列满;这种情况下,任务会由线程池中的空闲线程取出执行

3. 当线程队列workQueue也满了的情况下,若池容量尚未达到maximumPoolSize时,则将处于workQueue的队列头的任务取出,并启动新的线程来执行;此时应用要求执行的command任务既没有放入队列,也没有在线程中执行,而是再次进入这个池控制流程,直至该command任务被处理

下面是JAVA API中对线程队列的一段描述:

  • If fewer than corePoolSize threads are running, the Executor always prefers adding a new thread rather than queuing.
  • If corePoolSize or more threads are running, the Executor always prefers queuing a request rather than adding a new thread.
  • If a request cannot be queued, a new thread is created unless this would exceed maximumPoolSize, in which case, the task will be rejected.
分享到:
评论

相关推荐

    线程池之ThreadPoolExecutor.docx

    线程池的工作机制在于控制线程数量,它会将任务放入队列,然后根据线程池的设定创建并启动线程执行这些任务。如果线程数量超过最大限制,额外的任务会被排队等待,直到有线程完成任务释放资源。线程池的使用有三个...

    Java线程池与ThreadPoolExecutor.pdf

    使用ThreadPoolExecutor,开发者可以更精细地控制线程的生命周期和执行策略。 在确定最大线程数时,应考虑到系统的并发能力、任务的I/O密集程度和CPU密集程度。I/O密集型任务在等待I/O操作完成时会释放CPU,因此...

    使用线程池ThreadPoolExecutor 抓取论坛帖子列表

    在IT行业中,线程池是多线程编程中一个重要的概念,它可以帮助我们高效地管理和控制并发执行的任务。本文将详细讲解如何使用Java中的`ThreadPoolExecutor`来抓取论坛帖子列表,结合源码分析和实用工具的应用。 首先...

    12-线程池ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf

    它提供了许多核心属性和方法来控制线程池的行为。 #### 1.1 `ctl`变量 线程池内部维护了一个`AtomicInteger`类型的变量`ctl`,该变量用于表示线程池的状态和当前线程池中的工作线程数量。具体来说,`ctl`的值由两...

    ThreadPoolExecutor运转机制介绍

    `ThreadPoolExecutor` 提供了一种灵活的方式来配置线程池,通过控制线程的数量、队列的行为以及对超出容量的任务的处理方式,可以实现高性能的应用程序。 `ThreadPoolExecutor` 的构造函数如下: ```java public ...

    Tomcat线程池实现简介

    总结来说,Tomcat的线程池设计体现了高效的多线程管理策略,通过预创建和复用线程,以及合理的线程创建和销毁策略,确保了在高并发场景下的高性能和稳定性。理解并掌握这一机制,对于优化Java Web应用的性能有着重要...

    简单线程池与线程池检查的实现

    在标签“源码”和“工具”的提示下,我们可以推测该话题可能涉及到线程池的具体实现代码,例如使用Java的`java.util.concurrent.ThreadPoolExecutor`类进行线程池的创建和管理,以及可能通过自定义工具或框架对...

    线程池java

    4. **拒绝策略**:当任务队列已满并且无法接受更多任务时,线程池会采用一定的策略来处理这些任务。常见的策略包括丢弃任务、使用其他线程池、调用者运行等。 #### 三、使用示例 下面是一个简单的`...

    线程池简单实现chenjiegui

    但需要注意的是,这些预定义的线程池可能无法满足所有需求,因此在面临复杂并发场景时,通常需要自定义`ThreadPoolExecutor`来更好地控制线程池的行为。 总的来说,线程池是多线程编程中不可或缺的一部分,它通过...

    线程池管理线程demo

    如果需要更复杂的配置,如定制线程工厂、拒绝策略等,可以使用`ThreadPoolExecutor`直接创建线程池,如下: ```java int corePoolSize = 5; int maximumPoolSize = 10; long keepAliveTime = 5000L; TimeUnit ...

    线程池

    在Java中,`java.util.concurrent` 包提供了线程池的实现,如 `ExecutorService` 和 `ThreadPoolExecutor`。线程池的使用可以有效地管理和控制并发执行的任务,减少线程创建和销毁的开销,提高系统资源利用率。 在...

    线程池源码

    线程池通过控制并发度,避免了频繁创建和销毁线程的开销,提高了系统资源的利用率。同时,合理配置线程池参数可以防止系统资源耗尽,确保服务的稳定性和响应速度。 在`TheadPoolTest1`这个测试文件中,可能包含了对...

    java 四种线程池实例

    Java线程池是一种高效管理线程的技术,它可以帮助开发者更好地控制并发执行的线程数量,避免资源浪费,提高系统性能。在Java中,线程池是通过`java.util.concurrent`包中的`ExecutorService`接口及其实现类来实现的...

    一个简单的线程池例子

    通过查看和分析这个源代码,我们可以学习到线程池的具体实现细节,如如何创建线程、如何管理任务队列、如何调度任务以及如何控制线程池的生命周期。这有助于我们深入理解线程池的工作原理,从而更好地在实际项目中...

    Java 线程池.docx

    Java线程池是一种高效管理线程资源的工具,它的出现是为了应对多线程编程中频繁创建和销毁线程带来...在实际应用中,通常会使用自定义的线程池,例如使用`ThreadPoolExecutor`类来创建,以便更精确地控制线程池的行为。

    java线程池实例详细讲解

    Java线程池是一种高效管理线程资源的工具,它能够帮助开发者有效地控制并调度线程,从而提升系统性能,减少系统资源的浪费。在Java中,`ExecutorService`接口是线程池的主要入口,它是`java.util.concurrent`包的一...

    用线程池异步加载

    在Android中,我们可以使用`java.util.concurrent`包下的`ExecutorService`接口和其实现类,如`ThreadPoolExecutor`来创建线程池。线程池允许我们设定核心线程数、最大线程数、线程存活时间以及任务队列等参数,以...

    Java线程池文档

    3. **任务调度和控制**:线程池提供了多种策略来控制任务的执行,如设置优先级、定时执行等。 Java代码中展示的`ThreadPool`类是作者实现的一个简单线程池示例,使用了`LinkedList`作为工作队列,`ThreadPool`类...

    线程池java写的代码

    线程池能够有效地管理和控制线程,避免过多的线程创建和销毁带来的性能开销。本文将深入探讨Java中的线程池实现及其相关知识点。 ### 1. Java线程池的实现 Java通过`java.util.concurrent`包中的`ExecutorService`...

Global site tag (gtag.js) - Google Analytics