java定时任务指定时间执行,Java手动调用定时任务
java如何定时执行一个方法
爪哇岛实现定时功能有多种方式,下面介绍3种:
1、创建一个线程.
导入Java。util。日期;
公共类ThreadTest {
公共静态void main(String[] args) {
//设置执行周期
最终长时间间隔=3000;
Runnable Runnable=new Runnable(){
公共无效运行(){
while (true) {
System.out.println(任务运行. 新日期());
尝试{
线程.睡眠(时间间隔);
} catch (InterruptedException e) {
e。printstacktrace();
}
}
}
};
螺纹螺纹=新线程(runnable);
线程。start();
}
}2、使用 JDK 自带的 API Timer 以及 TaskTimer。
这种方式和第一种简单粗暴的方式有什么区别呢,主要体现在使用应用程序接口可以在指定的时间开始启动任务,可以延期执行首次任务,同样也看可以设置一定的时间间隔,但是原理是是一样的,后台还是启动了一个线程,应该说是只有一个线程在执行任务,不管我们启动的工作有几个。所以这也会有问题,比方说一个一个任务没有执行完成,另一个任务就开始执行了,可能会发生并发问题。还有若是一个任务中报错,则线程就会被停止。
导入Java。文字。简单的日期格式;
导入Java。util。日历;
导入Java。util。日期;
导入Java。util。计时器;
导入Java。util。timertask
公共类我的任务扩展了TimerTask{
私有字符串名称;
公共我的任务(字符串名称){
this.name=name
}
公共字符串getName() {
返回名称;
}
公共void集合名称(字符串名){
this.name=name
}
@覆盖
公共无效运行(){
简单日期格式SF=新建简单日期格式( yyyy-MM-DD HH:MM:ss );
字符串格式=SF。format(new Date());
System.out.println(exec MyTask.当前时间为:格式);
System.out.println(this.name 正在执行!SF。format(new Date());
}
公共静态void main(String[] args) {
Timer Timer=new Timer();
TimerTask任务1=新建我的任务(任务1 );
TimerTask任务2=新建我的任务(任务2 );
日历日历1=日历。getinstance();
calendar1.add(日历。第二,3);
日历日历2=日历。getinstance();
calendar2.add(日历。第二,5);
简单日期格式SF=新建简单日期格式( yyyy-MM-DD HH:MM:ss );
字符串格式=SF。format(new Date());
System.out.println(当前时间为:格式);
timer.schedule(task1,calendar1.getTime(),3000 l);
timer.schedule(task2,calendar2.getTime(),3000 l);
}
}其实在计时器中,封装了一个工作的队列和时间的线程对象,我们自定义的工作的引用会放在队列中等待执行。
大致是这么一个关系计时器-计时器线程-任务队列-我的任务-运行当然最终执行的方法肯定是我们自定义任务中的奔跑方法。因为我们自定义的任务已经继承了时间任务,而这个类已经实现了可追捕的接口。
3、使用ScheduledExecutorService
ScheduledExecutorService是做为并发工具类被引进的,这是最理想的定时任务实现方式。
1.相比于计时器的单线程,它是通过线程池的方式来执行任务的。
2.可以很灵活的去设定第一次执行任务耽搁时间。
3.提供了良好的约定,以便设定执行的时间间隔。
导入Java。util。日期;
导入Java。util。并发。遗嘱执行人;
导入Java。util。并发。scheduledexecutorservice
导入Java。util。并发。时间单位;
公共类qwe {
公共静态void main(String[] args) {
//新建定时任务
Runnable Runnable=new Runnable(){
//运行方法中是定时执行的操作
公共无效运行(){
system . out . println(new Date());
}
};
ScheduledExecutorService service=executors . newsinglethreadscheduledexecutor();
/*
*参数1:命令:执行线程
*参数2: initialDelay:初始化延迟
*参数3: period:两次开始执行之间的最小间隔。
*参数4:单位:计时单位
*/
service . scheduleatfixedrate(runnable,0,60,TimeUnit。秒);
}
}我们,大量免费的入门Java教程,欢迎在线学习!这就是java如何有规律地执行任务的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。