之前不知道是看了哪篇文章,形成了一个概念,说ThreadPoolExecutor的线程超时回收机制,是采用的DeplyQueue,我觉得非常惊讶,DeplyQueue虽然说是超时的能够取出回收,但是那些没有超时的对象,是怎么也取不出来的啊,带着这个问题,我详细阅读了一下这部分的源代码,发现其实现和DelayQueue一点关系也没有,也算是解决了我的一个疑问。
该线程池的实现,主要有两个容器,一个放任务,一个放线程,然后其他一堆参数,都围绕这2个容器进行设置。
BlockingQueue: 这是一个任务(Runnable)队列。每次提交上来的任务,如果不是能立刻执行的话,都会存到这个队列里面。
HashSet: 这个是一个Thread的容器,容器里面的Thread会一刻不停的从BlockingQueue里面take任务,直到BlockingQueue的所有任务都清掉了,这些Thread还是不停地take,这个时候当然take不到任何东西,从而被阻塞起来。阻塞了一段可配置的时间(keepAliveTime)后,线程就会被清掉。
对于HashSet的容量,可以设置一个正常值(corePoolSize),
当HashSet里面的Thread数量小于这个值的时候,新进来的任务就不进入到BlockingQueue队列了,立刻被新创建的线程执行,同时这个新的线程加入到了HashSet里面。
当HashSet里面的数量大于这个正常值的时候,新任务就加到队列里面,等待被take出去然后执行。
HashSet的容量可以设置一个最大值(maxPoolSize),当队列满了的时候,仍然有很多任务进来,这时如果HashSet还没有达到最大值,就又能创建新的Thread来处理这些任务,处理完后线程被加入到HashSet中,继续开始take队列里面的任务。
分享到:
相关推荐
首先,Python标准库提供了一个名为`concurrent.futures`的模块,其中包含`ThreadPoolExecutor`类,它是实现线程池功能的基础。`ThreadPoolExecutor`允许我们创建一个线程池对象,通过`submit()`方法提交任务,`...
这两个线程池都是对Java的ThreadPoolExecutor的扩展,以满足Mina框架在处理I/O事件时的特定需求。 OrderedThreadPoolExecutor是Mina中用于确保处理I/O事件顺序的线程池。它通过维护每个IoSession(网络连接)的任务...
在Java中,`java.util.concurrent`包提供了`ExecutorService`接口和`ThreadPoolExecutor`类,它们为实现线程池提供了标准的API。`ThreadPoolExecutor`允许我们自定义核心线程数、最大线程数、任务队列以及线程存活...
- **Java内置线程池**:Java通过`java.util.concurrent`包中的`ExecutorService`接口及其实现类如`ThreadPoolExecutor`提供了线程池的实现。`ThreadPoolExecutor`允许自定义线程池的核心参数,如核心线程数、最大...
Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现...线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。 2.数据批量导出。 3任务数据异步执行。 4.多线程请求第三方接口限流。
Python标准库提供了`concurrent.futures`模块,其中包括了ThreadPoolExecutor,这是一个用于创建线程池的类。 在Python2.7中,虽然`concurrent.futures`模块没有被引入,但开发者可以通过`threading`模块自己实现...
对于更复杂的应用场景,建议使用成熟的线程池框架,如`ThreadPoolExecutor`,它可以提供更完善的特性和更好的性能。 通过本次实践,我们不仅了解了线程池的工作原理,还学到了如何根据需求灵活定制线程池的行为,这...
它包括了各种线程池实现,如ThreadPoolExecutor,它是Java中最常用的线程池。线程池允许开发者管理和复用已创建的线程,提高系统效率,避免频繁创建和销毁线程带来的开销。 **ThreadPoolExecutor** 是Java并发库中...
尽管描述部分为空,但从提供的文件名我们可以推测,`CodeReader.java`和`SourcePathManager.java`可能包含了读取和管理代码路径的逻辑,而`CodeReader`可能是用于解析和理解Java源码中线程池和消息队列实现的部分。...
其中,ThreadPoolExecutor是Java中的一种线程池实现,Spring框架也提供了对ThreadPoolExecutor的支持。今天,我们将讨论如何使用ThreadPoolExecutor在Spring中配置线程池,并且得到任务执行的结果。 一、...
在Java中,`java.util.concurrent` 包提供了线程池的实现,如 `ExecutorService` 和 `ThreadPoolExecutor`。线程池的使用可以有效地管理和控制并发执行的任务,减少线程创建和销毁的开销,提高系统资源利用率。 在...
Java 中的线程池类是 `java.util.concurrent.ThreadPoolExecutor`,它提供了一个线程池的实现。该类有一个构造方法,参数包括: * `corePoolSize`:线程池维护线程的最少数量 * `maximumPoolSize`:线程池维护线程...
最常见的实现是`ThreadPoolExecutor`,它允许我们自定义线程池的核心参数,如核心线程数、最大线程数、线程存活时间等。使用线程池查询大批量数据的基本步骤如下: 1. **创建线程池**:首先,我们需要创建一个...
`ExecutorService` 是一个接口,提供了管理和控制线程池的功能,而 `ThreadPoolExecutor` 是其具体实现,可以通过构造函数自定义线程池的参数,如核心线程数、最大线程数、线程存活时间、任务队列类型等。...
线程池的概念源于Java的ExecutorService,Android中主要通过`java.util.concurrent`包下的`ThreadPoolExecutor`类来实现。线程池的基本工作原理包括:接收任务、调度任务、执行任务以及管理线程。 1. **线程池的...
可能的实现方式是创建一个线程池,然后在服务端接收到请求时,将处理任务放入线程池,由线程池中的线程去执行实际的业务逻辑。 6. **优化策略**:在实际应用中,可以根据应用的需求调整线程池的配置,比如设置合适...
Java定时器线程池,即`ScheduledThreadPoolExecutor`,是Java并发编程中一个重要的工具,它继承自`ThreadPoolExecutor`并扩展了定时和周期性任务的执行能力。`ScheduledThreadPoolExecutor`提供了定时执行、延迟执行...
1. **线程池的实现**:实验中可能使用了ThreadPoolExecutor来创建线程池,定义了核心线程数和最大线程数,以控制并发处理的请求数量。同时,可能还设置了工作队列(如ArrayBlockingQueue或LinkedBlockingQueue),...
在实际应用中,Java提供了更高级的线程池实现,如 `java.util.concurrent.ThreadPoolExecutor`,它提供了更丰富的功能,如工作队列、拒绝策略和执行时间控制等。然而,理解基本的线程池概念和实现机制对于优化并发...