用java实现定时任务要稳定的。谁帮实现一下。 比如: 每天早上8点输出一句话。(天天早上8点都输出).
发布网友
发布时间:2022-04-30 01:37
我来回答
共4个回答
热心网友
时间:2023-10-11 15:36
如果是linux,可以使用linux的cron服务来每天8点运行你的程序
如果不是或者没有条件使用cron,可以考虑使用java的开源组件quartz,它完全支持cron表达式来声明定时任务,也易于和spring集成。楼上已经给出quartz的用法了。
如果要纯粹自己写一个程序的话:
public class Test {
public static void main(String[] args) throws Exception{
while(true){
//睡到明天8点
Thread.sleep(getDelay());
System.out.println("起床啦~~");
}
}
private static long getDelay(){
//计算离下一次8点还有多久(毫秒)
long delay = 0;
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.MINUTE, 59);
c.set(Calendar.SECOND, 59);
//计算当前离今天23:59:59有多少毫秒
delay = c.getTimeInMillis() - System.currentTimeMillis();
//加一秒到下一天,再加上8小时的毫秒
delay = delay + 1000 + 60*60*8*1000;
return delay;
}
}
注意:这个程序有一个问题:就是如果print语句换成一个非常耗时的操作,以至于到第二天才执行完,那么就会跳过第二天8点直接到第三天八点了。不过按你的要求,输出一句话是没问题的。
你也可以不用Thread.sleep,用Timer类也可以。
热心网友
时间:2023-10-11 15:37
用quartz 吧,通过简单的配置文件就可实现。
<cron-expression>0 15 10 * * ? 2001</cron-expression>这个标签是配置执行频率的,从网上搜索下正则表达式即可。
<?xml version="1.0" encoding="UTF-8"?>
<quartz >
<!-- 注册material -->
<job>
<job-detail>
<!-- job 的名字 -->
<name>......</name>
<group>DEFAULT</group>
<description>The job description</description>
<!-- job类的路径加类名 -->
<job-class>......</job-class>
</job-detail>
<!-- 注册触发器 -->
<trigger>
<cron>
<name>......</name>
<group>DEFAULT</group>
<job-name>......</job-name>
<job-group>DEFAULT</job-group>
<cron-expression>0 15 10 * * ? 2001</cron-expression>
</cron>
</trigger>
</job>
</quartz >追问你这个好深奥呀。能用类实现吗。
热心网友
时间:2023-10-11 15:37
自己去复制执行,timer是util的timer
public static void main(String[] args) {
int i=1000; //1000毫秒及1秒
int s=60000;
Timer t=new Timer();
t.schele(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
SimpleDateFormat sdf=new SimpleDateFormat("HH");
if(sdf.format(new Date()).equals("08")){
System.out.println("现在8点");
}
}
}, i, s);
}
热心网友
时间:2023-10-11 15:38
windows本身就有任务计划
写个程序输出一句话,然后加到任务计划里每天定时运行程序就行了。
linux也有类似的服务。