`

ScheduledExecutorService执行定时任务

 
阅读更多

ScheduledExecutorService

 

作者:赵磊

博客:http://elf8848.iteye.com

 

java.util.concurrent.Executors可创建一个线程池,它可给定延迟后定期地执行任务。
Executors.newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory)


其中的scheduleAtFixedRate 和 scheduleWithFixedDelay 方法可以创建并执行任务,这些任务一直执行 ,并且是可以取消的任务。

 

 

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.logging.SimpleFormatter;

/**
 * ScheduledExecutorService 测试
 * 
 * @author zhaolei 2012-5-23
 */
public class ScheduledThreadPoolTest {

	private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
	static SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd dd:mm:ss");

	/**
	 * beepForTime
	 */
	public static void beepForTime() {
		
		/**
		 * 要执行的任务
		 */
		final Runnable beeper = new Runnable() {
			int i=0;
			public void run() {
				System.out.println("beep:"+(i++)+"----"+sf.format(new Date(System.currentTimeMillis())));
				//throw new RuntimeException();
				
				//任务耗时2秒
				try {
					Thread.sleep(2000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		};
		


		int startTime=3;
		int each=5;
		System.out.println("任务将于"+startTime+"秒后开始,每"+each+"秒执行1次");
		
		/**
		 * 每each秒执行一次任务,两次任务的执行间隔是each秒(前面定义的变更)
		 * 
		 * 
		 * 创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;
		 * 也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,
		 * 接着在 initialDelay + 2 * period 后执行,依此类推。如果任务的任何一个执行遇到异常,
		 * 则后续执行都会被取消。否则,只能通过执行程序的取消或终止方法来终止该任务。
		 * 如果此任务的任何一个执行要花费比其周期更长的时间,则将推迟后续执行,但不会同时执行。
		 * 参数:
		 * command - 要执行的任务
		 * initialDelay - 首次执行的延迟时间
		 * period - 连续执行之间的周期
		 * unit - initialDelay 和 period 参数的时间单位 
		 * 
		 */
		//final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(beeper, startTime, each, TimeUnit.SECONDS);
		
		
		/**
		 * 
		 * 每each秒执行一次任务,两次任务的执行间隔是each秒(前面定义的变更)+任务执行用时
		 * 
		 * 创建并执行一个在给定初始延迟后首次启用的定期操作,
		 * 随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟。
		 * 如果任务的任一执行遇到异常,就会取消后续执行。
		 * 否则,只能通过执行程序的取消或终止方法来终止该任务。 
		 * 参数:
		 * command - 要执行的任务
		 * initialDelay - 首次执行的延迟时间
		 * period - 连续执行之间的周期
		 * unit - initialDelay 和 period 参数的时间单位 
		 * 
		 */
		final ScheduledFuture<?> beeperHandle = scheduler.scheduleWithFixedDelay(beeper, startTime, each, TimeUnit.SECONDS);
		
		/**
		 * 创建并执行在给定延迟后启用的一次性操作。
		 * 
		 * 这里用于在N时间后取消任务
		 */
		scheduler.schedule(new Runnable() {
			public void run() {
				System.out.println("取消任务");
				beeperHandle.cancel(true);
			}
		}, 60, TimeUnit.SECONDS);
	}

	/**
	 * main
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		beepForTime();
	}
}
 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    ScheduledExecutorService任务定时代码示例

    这个方法创建了一个单线程的cheduledExecutorService,用于执行定时任务。 fixedRate 方法 fixedRate 方法用于按指定频率周期执行某个任务。在上面的示例代码中,我们使用了 scheduleAtFixedRate 方法来执行 Echo...

    JAVA项目服务器启动时自启动指定的Servlet,并定时执行任务

    在这个例子中,我们在`init()`方法中创建了一个`ScheduledExecutorService`实例,并设置了一个定时任务,它将在服务器启动后每小时执行一次。在`destroy()`方法中,我们关闭了`executor`以释放资源。 总结,通过在`...

    Java定时执行某个任务

    `Timer`适合简单的定时任务,而`ScheduledExecutorService`更适合复杂的需求,如多线程环境和高并发场景。选择哪种方式取决于具体的应用场景和性能需求。在实际开发中,理解并熟练掌握这两种方法能帮助我们编写出...

    TimerTask执行每日定时任务

    总之,`TimerTask`和`Timer`是Java中用于执行定时任务的基础工具,适合轻量级的定时需求。通过合理地创建`TimerTask`子类并配置`Timer`,可以实现包括每日定时任务在内的各种周期性任务。在实际开发中,应根据项目...

    ScheduledExecutorService 计时器任务处理

    ScheduledExecutorService是Java并发编程中一个非常重要的工具类,它属于ExecutorService接口的一个实现,主要用于执行定时或周期性的任务。这个服务提供了强大的定时任务管理能力,可以用来安排在未来某一时刻或者...

    java轻松实现—定时任务

    Java中的定时任务是软件开发中一个非常重要的功能,它允许我们按照预定的时间间隔执行特定的任务,比如数据备份、日志清理、系统监控等。在Java中,我们可以利用`java.util.Timer`类和`java.util.TimerTask`类来实现...

    Spring定时任务实现(非Web项目)

    2. **定义定时任务**:在需要执行定时任务的类上,我们可以定义一个或多个`@Scheduled`注解的方法。例如: ```java @Service public class MyTaskService { @Scheduled(fixedRate = 5000) // 每隔5秒执行一次 ...

    IntelliJ IDEA中创建Spring boot项目,定时任务测试

    3. **单元测试**:为确保定时任务的正确性,可以编写单元测试,使用`@Test`和`@ScheduledExecutorService`模拟任务调度,测试任务逻辑。 通过以上步骤,我们便能在IntelliJ IDEA中成功创建一个Spring Boot项目,并...

    java 定时执行任务

    在Java中,有两种主要的方式来实现定时任务:Java.util.Timer类和java.util.concurrent包下的ScheduledExecutorService接口。下面我们将详细探讨这两种方法。 1. Java.util.Timer类和TimerTask `Timer`类是Java早期...

    Spring 定时任务源码(spring 三种定时任务的实现方式)

    在需要执行定时任务的方法上添加@Scheduled注解,并指定cron表达式或fixedRate/fixedDelay参数,即可实现定时任务。Spring会自动扫描并注册这些任务,无需额外配置。例如: ```java @Component public class ...

    java quartz 定时任务

    - Quartz 是一个完全由Java编写的开源作业调度框架,它可以在Java应用中用于执行定时任务。Quartz 支持集群环境,可以在多台服务器上分布式运行,以提高系统的可用性和可靠性。 2. **定时任务**: - 定时任务是在...

    Timer定时任务

    此外,`Timer`类的另一个特性是,如果定时任务执行过程中抛出了未捕获的异常,那么`Timer`线程会终止,所有后续的定时任务都不会执行。因此,编写定时任务时,必须确保任务的健壮性,对可能出现的异常进行适当的处理...

    定时任务+案例

    在IT行业中,定时任务是一种非常重要的技术,它允许我们在特定的时间点或按照预设的周期执行某项操作。本案例中的“定时任务+案例”显然关注的是如何利用编程语言(可能是Java,因为Java中常使用Calendar类进行日期...

    Java定时任务及其在工作流系统中的应用.pdf

    Java定时任务是指在Java平台上执行定时任务的机制,以满足工作流系统中的需求。在工作流系统中,定时任务可以用于发送工作到期提醒邮件、自动执行任务、监控系统状态等。 Java提供了多种定时任务机制,包括Timer类、...

    java定时任务

    NFDFlightDataTimerTask类继承自TimerTask类,实现了run方法,用于执行定时任务。 在TimerManager类中,使用Calendar类来设置定时任务的执行时间。在本例子中,设置的执行时间为每天凌晨2点。使用Calendar类的set...

    6.2 创建定时和周期任务

    2. **Timer和TimerTask**:这是一个更通用的Java定时器框架,适用于需要在后台线程执行定时任务的情况。Timer创建了一个计划任务的调度表,而TimerTask是实际的任务类,继承自它并重写`run()`方法。通过`timer....

    java 定时任务及jar包

    Java定时任务是Java编程中一个重要的特性,它允许开发者安排任务在特定的时间点或周期性地执行。在Java中,我们可以使用内置的`java.util.Timer`类和`java.util.concurrent.ScheduledExecutorService`来实现定时任务...

    页面控制定时任务源码

    在IT行业中,页面控制定时任务是一种常见的需求,它主要用于实现网页上的某些功能自动化执行或定期更新。例如,可能需要在用户界面中定时刷新数据、自动发送通知或者在特定时间执行某些计算任务。这个主题主要涉及两...

    定时任务,JSP

    - JDK 8引入的`java.time`包,可以配合`ScheduledExecutorService`创建定时任务。 2. **JSP技术**: - JSP是一种基于Java的服务器端技术,用于生成动态HTML、XML或其他格式的文档。它将Java代码嵌入到HTML中,...

    java每天实现定点执行任务

    要完成这样的功能,我们通常会利用Java的定时任务框架,如`java.util.Timer`类、`java.util.concurrent.ScheduledExecutorService`或者更高级的Quartz库。以下将详细介绍如何使用这些方法来实现每日定时任务。 1. *...

Global site tag (gtag.js) - Google Analytics