java代码定时任务调度 java 定时任务配置

在Java中如何设置一个定时任务的代码应该怎么写?指定定时任务的代码如下:
public void schedule(TimerTask task,Date time)
比如,我们希望定时任务2006年7月2日0时0分执行,只要给第二个参数传一个时间设置为2006年7月2日0时0分的Date对象就可以了.
有一种情况是,可能我们的程序启动的时候,已经是2006年7月3日了,这样的话,程序一启动,定时任务就开始执行了.
schedule最后一个重载的方法是
public void schedule(TimerTask task,Date firstTime,long period)
既然号称是定时任务,我们肯定希望由我们来指定任务指定的时间,显然上面的方法就不中用了,因为我们不知道程序什么时间开始运行,就没办法确定需要延时多少.没关系,schedule四个重载的方法还没用完呢.用下面这个就OK了 。
Java 如何实现这样的定时任务JDK中,定时器任务的执行需要两个基本的类:
java.util.Timer;
java.util.TimerTask;
要运行一个定时任务,最基本的步骤如下:
1、建立一个要执行的任务TimerTask 。
2、创建一个Timer实例,通过Timer提供的schedule()方法,将 TimerTask加入到定时器Timer中,同时设置执行的规则即可 。
当程序执行了Timer初始化代码后,Timer定时任务就会按照设置去执行 。
Timer中的schedule()方法是有多种重载格式的,以适应不同的情况 。该方法的格式如下:
void schedule(TimerTask task, Date time)
安排在指定的时间执行指定的任务 。
void schedule(TimerTask task, Date firstTime, long period)
安排指定的任务在指定的时间开始进行重复的固定延迟执行 。
void schedule(TimerTask task, long delay)
安排在指定延迟后执行指定的任务 。
void schedule(TimerTask task, long delay, long period)
安排指定的任务从指定的延迟后开始进行重复的固定延迟执行 。
Timer是线程安全的,此类可扩展到大量同时安排的任务(存在数千个都没有问题) 。其所有构造方法都启动计时器线程 。可以调用cancel() 终止此计时器,丢弃所有当前已安排的任务 。purge()从此计时器的任务队列中移除所有已取消的任务 。此类不提供实时保证:它使用 Object.wait(long) 方法来安排任务 。
TimerTask是一个抽象类 , 由 Timer 安排为一次执行或重复执行的任务 。它有一个抽象方法run()----计时器任务要执行的操作 。因此 , 每个具体的任务类都必须继承TimerTask类,并且重写run()方法 。另外它还有两个非抽象的方法:
boolean cancel()
取消此计时器任务 。
long scheduledExecutionTime()
返回此任务最近实际 执行的安排 执行时间 。
java代码启动一个定时任务在应用里经常都有用到在后台跑定时任务的需求 。举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据、文件等 。在本文里,3种不同的实现方法:
普通thread实现
TimerTask实现
ScheduledExecutorService实现
1.普通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();
}
}
2.用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
}
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);
}
}
java 定时任务的几种实现方式JDK 自带的定时器实现
// schedule(TimerTask task, long delay) 延迟 delay 毫秒 执行
// schedule(TimerTask task, Date time) 特定时间执行
public static void main(String[] args) {
for (int i = 0; i10;i) {
new Timer("timer - "i).schedule(new TimerTask() {
@Override
public void run() {
println(Thread.currentThread().getName()" run ");
}
}, 1000);
}
}
2. Quartz 定时器实现
//首先我们需要定义一个任务类,比如为MyJob02,
//该类需要继承Job类,然后添加execute(JobExecutionContext context)方法 , 在
//这个方法中就是我们具体的任务执行的地方 。
//由希望由调度程序执行的组件实现的接口
public class MyJob02 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
// 执行响应的任务.
System.out.println("HelloJob.execute," new Date());
}
}
public class QuartzTest5 {
public static void main(String[] args) throws Exception {
//SchedulerFactory 是一个接口,用于Scheduler的创建和管理
SchedulerFactory factory = new StdSchedulerFactory();
//从工厂里面拿到一个scheduler实例
//计划表(可能翻译的不太贴切),现在我们有了要做的内容 ,
//与调度程序交互的主要API
/*
* Scheduler的生命期 , 从SchedulerFactory创建它时开始,
到Scheduler调用shutdown()方法时结束;Scheduler被创建后 ,
可以增加、删除和列举Job和Trigger , 以及执行其它与调度相关的操作
(如暂停Trigger) 。但是,Scheduler只有在调用start()方法后 ,
才会真正地触发trigger(即执行job)
*/
Scheduler scheduler = factory.getScheduler();
//具体任务.
//用于定义作业的实例
//JobBuilder - 用于定义/构建JobDetail实例,用于定义作业的实例 。
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();
//Trigger(即触发器) - 定义执行给定作业的计划的组件
//TriggerBuilder - 用于定义/构建触发器实例
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0/1* * * * ?")).build();
scheduler.scheduleJob(job, trigger);
scheduler.start();
}
3. Springboot 任务调度(这个非常容易实现)
/*
*开启对定时任务的支持
*在相应的方法上添加@Scheduled声明需要执行的定时任务 。
*/
@EnableScheduling
//@EnableScheduling注解来开启对计划任务的支持
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Component
public class ScheduledTasks {
private Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
privateinti=0;
//0 0 0 2 * ?
@Scheduled(cron="***2*?")
//@Scheduled 注解用于标注这个方法是一个定时任务的方法
public void testFixDelay() {
logger.info("执行方法" i);
}
【java代码定时任务调度 java 定时任务配置】java代码定时任务调度的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 定时任务配置、java代码定时任务调度的信息别忘了在本站进行查找喔 。

    推荐阅读