⑴ 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();