在应用里经常都有用到在后台跑定时任务的需求。举个例子,比如需要在服务后台跑一个定时任务来进行垃圾回收(译者注:个人觉得用定时任务来跑垃圾回收不是很好的例子,从译者接触到的项目来看,比较常见的是用定时任务来进行非实时计算,清除临时数据、文件等)。
在本文里,我会给大家介绍3种不同的实现方法:
普通thread实现
TimerTask实现
ScheduledExecutorService实现
普通thread
这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下:
public class Task1 {
public static void main(String[] args) {
// run in a second
final long timeInterval = 1000;
Runnable runnable = new Runnable() {
public void run() {
while (true) {
// ------- code for task to run
System.out.println("Hello !!");
// ------- ends here
try {
Thread.sleep(timeInterval);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}
用Timer和TimerTask
上面的实现是非常快速简便的,但它也缺少一些功能。
用Timer和TimerTask的话与上述方法相比有如下好处:
当启动和去取消任务时可以控制
第一次执行任务时可以指定你想要的delay时间
在实现时,Timer类可以调度任务,TimerTask则是通过在run()方法里实现具体任务。
Timer实例可以调度多任务,它是线程安全的。
当Timer的构造器被调用时,它创建了一个线程,这个线程可以用来调度任务。
下面是代码:
import java.util.Timer;
import java.util.TimerTask;
public class Task2 {
public static void main(String[] args) {
TimerTask task = new TimerTask() {
@Override
public void run() {
// task to run goes here
System.out.println("Hello !!!");
}
};
Timer timer = new Timer();
long delay = 0;
long intevalPeriod = 1 * 1000;
// schedules the task to be run in an interval
timer.scheduleAtFixedRate(task, delay,
intevalPeriod);
} // end of main
}
这些类从JDK 1.3开始存在。
ScheduledExecutorService
ScheduledExecutorService是从Java SE 5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。
相比于上两个方法,它有以下好处:
相比于Timer的单线程,它是通过线程池的方式来执行任务的
可以很灵活的去设定第一次执行任务delay时间
提供了良好的约定,以便设定执行的时间间隔
下面是实现代码,我们通过ScheduledExecutorService#scheduleAtFixedRate展示这个例子,通过代码里参数的控制,首次执行加了delay时间。
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Task3 {
public static void main(String[] args) {
Runnable runnable = new Runnable() {
public void run() {
// task to run goes here
System.out.println("Hello !!");
}
};
ScheduledExecutorService service = Executors
.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);
}
}
文章来自:http://rijin.iteye.com/blog/2042335
分享到:
相关推荐
### Java定时任务实现:每天定时执行任务 #### 一、概述 在Java开发中,定时任务是非常常见的一种需求。例如,需要定期清理数据库中的过期数据、定时发送邮件通知等场景。本文将详细介绍如何利用Java内置的`Timer`...
在实现Java定时任务时,我们需要考虑以下几个关键点: - **任务调度策略**:根据业务需求选择合适的调度策略,如固定延迟、固定间隔或指定时间点执行。 - **任务并发控制**:确保多个任务执行时的互斥和资源管理,...
### Spring定时任务的几种实现 #### 一、定时任务实现技术分类 在Spring框架中,实现定时任务的主要技术方案有三种: 1. **Java自带的`java.util.Timer`类**:这种实现方式允许用户调度一个`java.util.TimerTask`...
Spring定时任务的几种实现,欢迎交流!
常见的几种定时任务实现 创建一个thread,然后让它在while循环里一直运行着, 通过sleep方法来达到定时任务的效果 JDK自带的Timer API算是最古老的定时任务实现方式了。Timer是一种定时器工具,用来在一个后台线程...
基于Java开发的动态定时任务管理系统源码+使用说明.zip 启动 1. csdn下载该项目源码。 2. 本地数据库创建一个名为 `scheduling` 的库。 3. 修改配置文件 `src/main/resources/application.yml`,主要修改数据库连接...
Java轻量级定时任务框架是开发中不可或缺的一部分,它允许开发者在特定的时间点执行特定的任务,无需编写大量的调度代码。本框架以ZIP压缩包的形式提供,名为"轻量级定时任务框架.zip",其中包含的核心组件是Quartz...
Java定时检测系统是一种基于Java编程语言实现的自动化解决方案,它能够按照预设的时间间隔执行特定的任务,例如数据更新、文件修改、系统监控等。在Java中实现这样的功能,主要依赖于以下几个关键知识点: 1. **...
在实现分布式定时任务时,有几个关键点需要注意: 1. **任务分发**:系统需要有策略地决定哪个节点应该执行哪个任务。这可以通过负载均衡算法或者任务分配中心来实现。 2. **幂等性**:确保同一个任务被触发多次...
根据提供的文件信息,本文将详细解析Java定时任务与Spring框架集成的相关知识点,包括如何在Spring环境中配置和管理定时任务。 ### Java定时任务简介 在Java中实现定时任务主要有以下几种方式: 1. **Timer和...
Quartz是一个开源的作业调度框架,能够触发在指定时间运行的任务,广泛应用于Java应用程序中进行定时任务的管理。Quartz的核心是Cron表达式,它允许开发者以一种灵活且可读性高的方式定义任务的执行时间。 #### ...
在Spring中配置定时任务通常有两种方式:XML配置和Java配置。在给定的描述中提到的是XML配置。在XML配置文件(如`applicationContext.xml`)中,你需要引入`task:`命名空间,并定义一个`task:annotation-driven`...
本文将深入探讨Spring框架下实现定时任务的几种主流方法,包括使用`java.util.Timer`(即Java定时器)、Spring定时器以及Quartz定时器,旨在帮助开发者根据具体业务场景选择最合适的技术方案。 ### 1. Java定时器...
Java中的定时任务通常通过以下几种方式实现: 1. **Java Timer类**:这是Java标准库中最早的定时任务解决方案。`java.util.Timer`和`java.util.TimerTask`类可以创建定时任务,但它们并不适合多线程环境,因为一个...
Java定时开关机程序是一种利用Java编程语言实现的实用工具,它可以按照预设的时间自动启动或关闭计算机。在本文中,我们将深入探讨Java编程基础、定时任务的实现方式以及如何创建一个能够控制计算机开关机的程序。 ...
在Spring框架中,有三种主要的定时任务机制可供开发者选择,分别是基于Quartz的定时机制、Spring自己的`@Scheduled`注解以及Java的`java.util.Timer`类。在这篇文章中,我们将重点讨论基于Quartz的定时机制,因为它...
Quartz是一款广泛使用的开源作业调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在实际应用中,我们可能需要根据业务需求动态地配置定时任务的执行方式,例如,某些任务可能需要串行执行,而其他任务则...
### 几种任务调度的Java实现方法与比较 在当今高度动态和复杂的应用环境中,任务调度成为确保系统高效运行的关键技术之一。本文旨在深入探讨几种常见的任务调度在Java中的实现方式,包括`Timer`、`...
Quartz 是一个强大的开源 Java 定时...总结来说,Quartz是一个强大且灵活的Java定时任务库,提供了丰富的特性来满足各种调度需求。通过下载并研究提供的压缩包,开发者可以深入理解并有效地在自己的项目中应用Quartz。
在Java中,定时任务的实现有多种方式,本文主要讨论了三种常见的方法:Timer和TimerTask、ScheduledExecutorService以及第三方库Quartz。这些方法各有特点,适用于不同的场景需求。 首先,我们来看Timer和TimerTask...