`

ScheduledExecutor任务调度

阅读更多

鉴于 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 取决于每次任务执行的时间长短,是基于不固定时间间隔进行任务调度。

分享到:
评论

相关推荐

    分布式任务调度框架 集合

    基于zookeeper+spring task的分布式任务调度组件,非常小巧,无需任何修改就可以使spring task具备分布式特性,确保所有任务在集群中不重复,不遗漏的执行。 5.Quartz 官方地址:...

    任务调度,任务调度,任务调度

    简单的任务调度池。for循环往里面塞300W个任务不倒。

    java 任务调度之ScheduledExecutor

    其设计思想是,每一个被调度的任务都会由线程池中一个线程去执行,因此任务是并发执行的,相互之间不会受到干扰。需 要注意的是,只有当任务的执行时间到来时,ScheduedExecutor 才会真正启动一个线程,其余时间 ...

    定时器 任务调度器 定时器 任务调度器

    定时器 任务调度器 定时器 任务调度器 定时器 任务调度器

    java定时任务调度

    java定时任务调度java定时任务调度java定时任务调度java定时任务调度java定时任务调度java定时任务调度

    表达式求值与任务调度

    表达式求值(中缀变前缀,中缀变后缀,前缀求值,后缀求值) 任务调度(基于时间,优先级)

    spring分布式任务调度

    改分布式任务调度特性如下: 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手; 2、动态:支持动态修改任务状态、暂停/恢复任务,以及终止运行中任务,即时生效; 3、调度中心HA(中心式):调度...

    UCOSII实验-任务调度.rar

    ucos-II是基于任务优先级抢占式任务调度法的,就是内核在管理调度时,调用任务切换,在中断服务程序中不允许进行任务调度

    算法实验3-任务调度

    在单处理器上具有期限和惩罚的单位时间任务调度问题的贪心算法

    操作系统——单处理器任务调度2

    在Linux环境下实现任务调度仿真,利用多线程实现任务池中的多个任务,支持先来先服务、轮转和反馈三种调度策略 设有任务A、B、C、D、E,分别具有不同的优先级和处理时间,通过一个调度线程对这5个任务进行调度。 1...

    任务调度问题---算法导论

    任务调度问题就是给定一个有穷单位时间任务的集合S,集合S中的每个任务都有一个截止期限di和超时惩罚wi,需要找出集合S的一个调度,使得因任务误期所导致的总惩罚最小,这个调度也称为S的一个最优调度。

    asp.net任务调度

    简单任务调度平台,用于.net dll,exe的任务的挂载,任务的隔离,调度执行,访问权限控制,监控,管理,日志,错误预警,性能分析等。 平台基于quartz.net进行任务调度功能开发,采用C#代码编写, 支持corn表达式和第...

    任务调度页面,计划调度页面

    任务调度使用的页面,计划调度使用的页面,任务调度使用的页面,计划调度使用的页面

    论文研究-基于粒子群优化的异构多处理器任务调度算法.pdf

    为提高异构多处理器任务调度的执行效率, 充分发挥多处理器并行性能, 提出一种基于粒子群优化的异构多处理器任务调度算法——FPSOTTS算法。该算法以求得任务最短完成时间为目标, 首先通过建立新的编码方式和粒子更新...

    基于java+JSP+SSH的任务调度系统设计与实现(源码+文档)_MySQL_JSP_BS_任务调度系统.zip

    资源名字:基于java+JSP+SSH的任务调度系统设计与实现(源码+文档)_MySQL_JSP_BS_任务调度系统.zip 资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 适合场景:相关...

    UCOSII任务调度

    UCOSII任务调度使用实例,多进程间进行任务调度,使用说明。

    Spring实现任务调度

    Spring实现任务调度.ppt Spring实现任务调度_代码演示 quartz-all-1.6.1.jar

    使用java的SSH框架设计与实现任务调度系统(含数据库).rar

    任务调度试系统,基本功能包括:用户的注册、用户的登录、发起项目、项目详细及搜索等。本系统结构如下: (1)用户的注册登录: 注册模块:完成用户注册功能; 登录模块:完成用户登录功能; (2)发起项目: ...

    基于windows的多任务调度代码.rar_windows多任务_任务 调度 C++_任务调度_多任务_多任务调度

    基于windows的多任务调度代码 实现多种任务的调度

    .net 分布式任务调度平台

    用于.net dll,exe的任务的挂载,任务的隔离,调度执行,访问权限控制,监控,管理,日志,错误预警,性能分析等。 1) 平台基于quartz.net进行任务调度功能开发,采用C#代码编写, 支持corn表达式和第三方自定义的...

Global site tag (gtag.js) - Google Analytics