ThreadPoolExecutor executor = new ThreadPoolExecutor(8, 32, 10, TimeUnit.SECONDS,
new DelayQueue());
我提交一个定时每5秒执行的任务,却发现一开始执行了8次,然后才是每5秒执行一次。
后来发现对于第一个任务,ThreadPoolExecutor 是有个bug的。
executor 是通过runWorker来执行的
final void runWorker(Worker w) {
Thread wt = Thread.currentThread();
Runnable task = w.firstTask;
w.firstTask = null;
w.unlock(); // allow interrupts
boolean completedAbruptly = true;
try {
while (task != null || (task = getTask()) != null) {
看到没有,有个firstTask,一般情况下回去队列中去取任务的:task = getTask()。但是对于第一个任务是特殊的,第一个任务不通过队列,所以延迟队列也就不起作用了。
分享到:
相关推荐
* 降低了系统的开销:ThreadPoolExecutor 可以重复使用线程,避免了频繁创建和销毁线程的开销。 * 提高了系统的灵活性:ThreadPoolExecutor 可以根据不同的工作负载动态地调整线程池的大小。 ThreadPoolExecutor 的...
ThreadPoolExecutor使用和思考
ThreadPoolExecutor线程池是Java并发编程中的一种线程管理机制,它允许开发者控制线程池的大小、线程的创建和销毁、任务的执行和队列管理等。通过ThreadPoolExecutor,可以实现线程池的动态调整、线程的重用和任务的...
在使用ThreadPoolExecutor执行任务时,我们可以使用FutureTask来获取任务执行结果。FutureTask是一个实现了Runnable和Future接口的类,它可以帮助我们获取任务执行结果。例如,我们可以创建一个FutureTask对象,并将...
《ThreadPoolExecutor源码解析》 ThreadPoolExecutor是Java并发编程中重要的组件,它是ExecutorService接口的实现,用于管理和调度线程的执行。理解其源码有助于我们更好地控制并发环境下的任务执行,提高系统的...
1.资源简介:PyQt5中使用多线程模块QThread解决了PyQt5界面程序执行比较耗时操作时,程序卡顿出现的无响应以及界面输出无法实时显示的问题,采用线程池ThreadPoolExecutor解决了ping多个IP多任务耗时问题。...
ThreadPoolExecutor的使用和Android常见的4种线程池使用介绍
创建线程池使用`ThreadPoolExecutor`构造函数,其参数含义如下: - `corePoolSize`: 核心线程数,表示线程池中保持的最小线程数。 - `maximumPoolSize`: 最大线程数,定义了线程池允许的最大并发线程数。 - `...
使用ThreadPoolExecutor类可以创建一个线程池,线程池可以维护一定数量的线程,用于执行任务。任务可以通过execute(Runnable)方法被添加到线程池,任务就是一个Runnable类型的对象,任务的执行方法就是Runnable类型...
ThreadPoolExecutor源码解析.md
当我们使用ThreadPoolExecutor时,需要首先创建一个ThreadPoolExecutor对象,然后将任务提交给线程池。任务可以是任何实现了Runnable接口的对象。 当我们提交任务时,ThreadPoolExecutor会根据实际情况来处理任务。...
`ThreadPoolExecutor` 提供了一种灵活的方式来配置线程池,通过控制线程的数量、队列的行为以及对超出容量的任务的处理方式,可以实现高性能的应用程序。 `ThreadPoolExecutor` 的构造函数如下: ```java public ...
JDK1[1].5中的线程池(ThreadPoolExecutor)使用简介
标题"redis list queue 和 ThreadPoolExecutor 结合"指的是如何将Redis的List数据结构作为消息队列与Java的ThreadPoolExecutor结合使用,以实现任务的异步处理和负载均衡。以下是对这一主题的详细探讨: 1. **Redis...
(转)线程池:java_util_ThreadPoolExecutor 比较详细的介绍了ThreadPoolExecutor用法与属性
本文将详细讲解如何使用Java中的`ThreadPoolExecutor`来抓取论坛帖子列表,结合源码分析和实用工具的应用。 首先,我们要了解线程池的基本原理。线程池是由一组预先创建的线程组成的,这些线程可以复用,而不是每次...
主要介绍了java ThreadPoolExecutor使用方法简单介绍的相关资料,需要的朋友可以参考下
3. 提交任务:使用execute方法提交任务到ThreadPoolExecutor中。 4. 关闭ThreadPoolExecutor:使用shutdown方法关闭ThreadPoolExecutor,防止新的任务提交。 在使用ThreadPoolExecutor时,还需要注意以下几点: * ...
NULL 博文链接:https://bijian1013.iteye.com/blog/2284676
主要涵盖ThreadPoolExecutor的基础概念介绍,创建配置参数的意义与选择方法,以及在实际编程中的几种典型应用场景,如任务的异步处理和周期定时任务调度。通过实例演示了如何利用ThreadPoolExecutor构建高效稳定的...