⑴ java 时钟(计时器) 每年年底最后一天(22:00) 执行一次(调用相应的方法)
用Timer类好一些。
--------------------------------------------------------------------------------
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class Main {
public static void main(String[] args) {
Calendar taskTime = Calendar.getInstance();
taskTime.set(Calendar.MONTH, 11);
taskTime.set(Calendar.DATE, 31);
taskTime.set(Calendar.HOUR, 22);
taskTime.set(Calendar.MINUTE, 00);
Calendar now = Calendar.getInstance();
if (taskTime.after(now)) {
// 任务时间在当前时间之后,设置当年 12/31 22:00执行
new Timer().schele(new MyTask(taskTime), taskTime.getTime());
} else if (taskTime.get(Calendar.YEAR) == now.get(Calendar.YEAR)) {
// 任务时间在当前时间之前,并且是同一年,执行一次
new Timer().schele(new MyTask(taskTime), new Date());
} else {
//
taskTime.add(Calendar.YEAR, now.get(Calendar.YEAR));
new Timer().schele(new MyTask(taskTime), taskTime.getTime());
}
}
}
class MyTask extends TimerTask {
private Calendar taskTime = null;
public MyTask(Calendar taskTime) {
this.taskTime = taskTime;
}
public void run() {
// 你要执行的
System.out.println("hello");
// 年+1
taskTime.add(Calendar.YEAR, 1);
new Timer().schele(new MyTask(taskTime), taskTime.getTime());
}
}
⑵ 在java中如何让定时器只启动一次
具体的做法:
Timer timer = new Timer();
timer.schele(new MyTask(), 1000)。
⑶ java做一个定时器,两台服务器,同一个时间执行,但我只要执行一次,要怎样做
你可以把另外一台服务器上面的定时器干掉,目前我们多服务器部署的时候都只会在一台服务器部署带定时器的Java项目。如果不想这样子的话你可以去研究一下负载均衡看能不能实现你的这个需求了。
⑷ java定时器 每天12点 固定执行一个方法
可以使用timer的schele方法实现定时任务,例如:把下面的new Date()参数换为你要定时的时间,创建一个线程执行你的任务
public class 定时 {
public static void main(String[] args) {
Timer timer = new Timer();
timer.schele(new myTest(), new Date());
}
}
class myTest extends TimerTask {
@Override
public void run() {
//你要执行的任务
}
System.out.println(hour + ":" + fen + ":" + sec + ":" + i);
}
修改一下就可以了
⑸ java定时器 每天凌晨 固定执行一个方法
二、如果是需要Tomcat启动就能执行,不需要main方法的定时器的话:
web.xml里面需要这么配置:
<listener>
<listener-class>
com.InitListener
</listener-class>
</listener>
第一个类:InitListener
package com.listener;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 系统启动时的监听类 初始化系统数据
*
* @author jhoneder
*
*/
public class InitListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
// context销毁时,销毁初始化数据
}
public void contextInitialized(ServletContextEvent event) {
// TODO Auto-generated method stub
try {
goTimmer();
} catch (Exception e) {
System.out.println("失败:" + e.getMessage());
}
}
private void goTimer() {
Timer timmerTask = new Timer();
Calendar calEnviron = Calendar.getInstance();
// 每天的02:00.am开始执行
calEnviron.set(Calendar.HOUR_OF_DAY, 2);
calEnviron.set(Calendar.MINUTE, 00);
// date为制定时间
Date dateSetter = new Date();
dateSetter = calEnviron.getTime();
// nowDate为当前时间
Date nowDateSetter = new Date();
// 所得时间差为,距现在待触发时间的间隔
long intervalEnviron = dateSetter.getTime() - nowDateSetter.getTime();
if (intervalEnviron < 0) {
calEnviron.add(Calendar.DAY_OF_MONTH, 1);
dateSetter = calEnviron.getTime();
intervalEnviron = dateSetter.getTime() - nowDateSetter.getTime();
}
// 每24小时执行一次
timmerTask.schele(new UseTimer(timmerTask), intervalEnviron, 1 * 1000 * 60 * 60 * 24);
}
}
第二个类:
package com.listener;
import java.util.Timer;
import java.util.TimerTask;
/**
* 被调用执行类
*
* @author Administrator
*
*/
public class UseTimer extends TimerTask {
Timer timer = new Timer();
public UseTimer(Timer timer) {
this.timer = timer;
}
/*
* 被调用具体的方法
*/
public void run() {
System.out.println("开始具体执行!");
}
}
不懂得话可以追问!
⑹ java事件触发计时器后二十四小时后只执行一次业务逻辑
java中有个定时任务 java.util.TimerTask
用法很简单
classMyTaskextendsjava.util.TimerTask{
@Override
publicvoidrun(){
//这个任何所执行的代码
}
}
java.util.Timertimer=newTimer(true); //treu就是守护线程
MyTasktask=newMyTask();
//开始执行任务,第一个参数是任务,第二个是延迟时间,第三个是每隔多长时间执行一次
timer.schele(task,0,1000*60*60*24);
⑺ java Timer定时器执行一次后意外终止
java.util.Timer 不推荐使用。
使用 java.util.concurrent.ScheledExecutorService 执行
⑻ java中每个月第一天执行一次任务的定时器如何实现
Date d = new Date();//获取服务器的时间。。。
Calendar c= Canlendar.getInstance();
c.setTime(d);
if(c.get(Calendar.DAY_OF_MONTH) == 1) //当前是1号
{
//拿出党员的入党日期(年月)同当前月进行比较 如果相同 发送短信
// //写下你的判断代码
}
else //当前不是1号 则从下个月1号开始执行定期任务
{
c.set(Calendar.MONTH,c.get(Calendar.MONTH)+ 1);//设置为下月
c.set(Calendar.DAY_OF_MONTH,1);//设置为下月的1号
Timer timer =new Timer();
timer.scheleAtFixedRate(new TimerTask()
{
public void run()
{
//每天都来判断一下 如果当前日期是1号
////则拿出党员的入党日期(年月)同当前月进行比较 如果相同 发送短信
//run函数里写下你的判断代码
}},c.getTime(),24* 3600*1000); //每天执行一次run()方法...
}
⑼ 在java中如何让定时器只启动一次
Timer timer = new Timer();
timer.schele(new MyTask(), 1000);
这种方式就行, 如果要中途取消,就用timer.cancel();