鉴于 Timer 的缺陷,Java 5 推出了基于线程池设计的 ScheduledExecutor。其设计思想是,每一个被调度的任务都会由线程池中一个线程去执行,因此任务是并发执行的,相互之间不会受到干扰。需要注意的是,只有当任务的执行时间到来时,ScheduedExecutor 才会真正启动一个线程,其余时间 ScheduledExecutor 都是在轮询任务的状态。
清单 2. 使用 ScheduledExecutor 进行任务调度
package com.ibm.scheduler; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ScheduledExecutorTest implements Runnable { private String jobName = ""; public ScheduledExecutorTest(String jobName) { super(); this.jobName = jobName; } @Override public void run() { System.out.println("execute " + jobName); } public static void main(String[] args) { ScheduledExecutorService service = Executors.newScheduledThreadPool(10); long initialDelay1 = 1; long period1 = 1; // 从现在开始1秒钟之后,每隔1秒钟执行一次job1 service.scheduleAtFixedRate( new ScheduledExecutorTest("job1"), initialDelay1, period1, TimeUnit.SECONDS); long initialDelay2 = 1; long delay2 = 1; // 从现在开始2秒钟之后,每隔2秒钟执行一次job2 service.scheduleWithFixedDelay( new ScheduledExecutorTest("job2"), initialDelay2, delay2, TimeUnit.SECONDS); } } Output: execute job1 execute job1 execute job2 execute job1 execute job1 execute job2
展示了 ScheduledExecutorService 中两种最常用的调度方法 ScheduleAtFixedRate 和 ScheduleWithFixedDelay。ScheduleAtFixedRate 每次执行时间为上一次任务开始起向后推一个时间间隔,即每次执行时间为 :initialDelay, initialDelay+period, initialDelay+2*period, …;ScheduleWithFixedDelay 每次执行时间为上一次任务结束起向后推一个时间间隔,即每次执行时间为:initialDelay, initialDelay+executeTime+delay, initialDelay+2*executeTime+2*delay。由此可见,ScheduleAtFixedRate 是基于固定时间间隔进行任务调度,ScheduleWithFixedDelay 取决于每次任务执行的时间长短,是基于不固定时间间隔进行任务调度。
相关推荐
在这个场景中,"任务调度,任务调度,任务调度"的标题强调了对这一主题的重视,而描述提到的"简单的任务调度池"暗示了我们正在讨论一种能够处理大量任务(例如300万个)的高效机制,而不会导致系统崩溃或性能严重...
《UCOSII实验-任务调度》 UCOSII,全称uC/OS-II,是一款广泛应用的嵌入式实时操作系统(RTOS),它以其高效、稳定和可移植性著称。在UCOSII中,任务调度是其核心功能之一,本实验将深入探讨这一主题。 一、UCOSII...
在本文中,我们将深入探讨如何在51单片机上实现一个简单的操作系统(OS),主要关注任务调度。这个话题基于KEIL开发环境和C51编程语言,这是一门专门针对8051系列单片机的编程语言。我们将讨论基本的OS概念,任务...
在计算机科学领域,任务调度是操作系统中的核心组件之一,它负责决定如何在多任务环境中分配处理器资源。在“算法实验3-任务调度”中,我们关注的是一个特定类型的调度问题,即在单处理器系统上处理具有期限和惩罚的...
在IT行业中,Spring框架是Java开发中的一个核心组件,它提供了丰富的功能,包括但不限于依赖注入、AOP(面向切面编程)以及我们今天要讨论的重点——任务调度。Spring的任务调度模块使得开发者能够在应用中轻松地...
在嵌入式系统设计中,任务调度是操作系统的核心部分,特别是在51单片机这种资源有限的微控制器上。本文将深入探讨合作式任务调度器的实现,它是一种早期的多任务处理方式,广泛应用于简单且实时性要求不高的场景。 ...
在IT行业中,任务调度是操作系统的核心功能之一,它在编程领域也有着广泛的应用,尤其是在并发和多线程编程中。本篇文章将详细讲解基于C++的任务调度器,并以GitHub上的开源项目"Bosma/Scheduler"作为参考,探讨其...
HEFT(Hierarchical Earliest Finish Time)算法是一种在并行计算和分布式系统中广泛使用的任务调度策略。这个算法的核心目标是最大化系统效率,通过优化任务的执行顺序来减少整体的完成时间。它特别适用于处理计算...
本文旨在深入探讨几种常见的任务调度在Java中的实现方式,包括`Timer`、`ScheduledExecutor`、开源工具包`Quartz`以及`JCronTab`,并对其特性进行对比分析,以帮助开发者根据具体需求选择最适合的方案。 #### Timer...
在IT领域,任务调度是操作系统的核心功能之一,特别是在实时操作系统(RTOS)中。然而,对于初学者来说,直接接触RTOS可能会感到困难。本主题将探讨如何使用C语言模拟任务调度,尽管这不是一个真正的RTOS实现,但能...
然后,文章提出了基于关键任务和处理器选择参数的启发式任务调度算法(HCNPSV),该算法结合列表调度和任务复制调度的思想,改进了关键任务的计算方法,并按照是否为关键任务、上行权重值递减、关联任务数递增的顺序...
《UCOSII任务调度详解》 在嵌入式操作系统领域,UCOSII(Micro-C/OS-II)是一款广泛应用的小型实时操作系统(RTOS),其高效的任务调度机制是其核心功能之一。本文将深入探讨UCOSII任务调度的原理、实现方式以及...
在IT领域,任务调度平台是不可或缺的一个组成部分,它在分布式系统、大数据处理、自动化运维等领域发挥着关键作用。本文将围绕“自己动手写任务调度平台项目源代码”这一主题,探讨任务调度平台的核心概念、设计原理...
### 网格计算中任务调度研究综述 #### 一、引言 网格计算作为当前互联网技术的重要分支,旨在解决大规模、异构资源的有效利用问题。任务调度作为网格计算的核心组成部分之一,对于提高整体系统效率、降低计算成本...
在Windows操作系统中,多任务调度是一项核心功能,它允许系统同时执行多个程序或进程,以实现高效的资源管理和用户交互。本资源"基于Windows的多任务调度代码.rar"提供了一个C++实现的多任务调度示例,这对于理解...
在嵌入式系统开发中,"TIMER_轮询_裸机定时器任务调度_"是一个重要的概念,它涉及到如何在没有操作系统支持的环境下有效地管理和执行多个定时任务。在这样的环境中,通常被称为“裸机”编程,因为没有操作系统来帮助...
云计算环境下任务调度策略的研究涉及了计算机科学与信息技术领域的多个重要知识点,这些知识点为实现云计算中心高效、稳定、安全的资源分配和任务处理提供了理论和技术支持。 1. 云计算任务调度的概念与特点 云计算...
《基于状态机的小型任务调度程序详解》 在IT领域,任务调度是系统管理的核心部分,它涉及到如何高效地分配和执行系统中的各种任务。本文将深入探讨一个名为“status_pt-1.4”的任务调度程序,该程序以其稳定性和...
Flink任务调度器是Apache Flink这一开源流处理框架的核心组件之一,它的主要职责是高效、灵活地管理和执行Flink程序中的数据处理任务。在理解Flink任务调度器之前,我们先简要介绍下Flink的基本概念。 Apache Flink...