導航:首頁 > 編程語言 > java定時器並發

java定時器並發

發布時間:2025-07-10 19:57:55

1. java 定時器 一天有多個時間點執行同一個程序如何實現

import java.util.*;
class MyTime
{
int hour; int minute;
MyTime(int hour,int minute){
this.hour=hour;
this.minute=minute;
}
}
public class AboutTime
{
public static void main(String args[]){
final MyTime mt=new MyTime(11,24);
//這里,假設程序運行時,是在早上8點半之前的。其他情況,你自行分析
Calendar cal=Calendar.getInstance();
//此方法獲得當前地域的時間,注意,getInstance是靜態方法
cal.set(cal.HOUR, mt.hour);//設置你所要等待的時刻
cal.set(cal.MINUTE, mt.minute);
Calendar cal2=Calendar.getInstance();//
long time1=cal.get(cal.HOUR_OF_DAY)*3600+cal.get(cal.MINUTE)*60;//將兩個時刻都轉換成秒數,以便進行相減
long time2=cal2.get(cal2.HOUR_OF_DAY)*3600+cal2.get(cal2.MINUTE)*60+cal2.get(cal2.SECOND);
final long waitTime=time1-time2;//此時獲得當前時刻與要等待時刻的時間差,單位是秒
//這里說明一下,現在所指的當前時刻是「Calendar cal2=Calendar.getInstance()」這句執行時所獲得的時刻
//獲得後,它的各值(秒,分,時)等信息都不會改變。當然,運行幾行代碼,花不了幾毫秒。所以
//雖然之前的cal2的時間信息與運行三行代碼以後的時間信息是差不多的
System.out.println(waitTime);//此行用於測試
new Thread(new Runnable(){
public void run(){
try{
for(long l=0;l<waitTime;l++){
Thread.sleep(1000);
System.out.println("###");//一秒打一個,當然,告訴你正在計時
//這里用多線程,因為運行後,可以繼續運行主線程。不影響你干其他事兒。
}
}
catch(InterruptedException e){}
System.out.println(mt.hour+":"+mt.minute+"到了");
}
}).start();
//不過,你說一天要三次計算。這很容易,如何實現,由你自己決定。
}
}

2. 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()方法...
}

3. 怎麼在java在servlet里設置個定時器,使其每隔幾個小時自動執行一個任務

  1. 如果是簡單的爛代碼,寫個死循環,獲取當前時間,如果時間到了你想要的時候就執行你想要執行的方法。

  2. 如果要寫的好點。起一個線程,線程里給個死循環,獲取當前時間,如果為你想要的時間,就另外起一個線程跑你要的程序,如果不是則當前線程睡30秒或者1分鍾什麼的。

4. java定時器 每天凌晨 固定執行一個方法

可以通過以下方式實現,

public class TimerManager {
//時間間隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
public TimerManager() {
Calendar calendar = Calendar.getInstance();
/*** 定製每日:00執行方法 ***/
calendar.set(Calendar.HOUR_OF_DAY, 2);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);

Date date=calendar.getTime(); //第一次執行定時任務的時間

//如果第一次執行定時任務的時間 小於 當前的時間
//此時要在 第一次執行定時任務的時間 加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
}

Timer timer = new Timer();

NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
//安排指定的任務在指定的時間開始進行重復的固定延遲執行。
timer.schele(task,date,PERIOD_DAY);
}

// 增加或減少天數
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}

}

public class NFDFlightDataTimerTask extends TimerTask {

private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);

@Override
public void run() {
try {
//在這里寫你要執行的內容

} catch (Exception e) {
log.info("-------------解析信息發生異常--------------");
}
}
}

public class NFDFlightDataTaskListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
new TimerManager();
}
public void contextDestroyed(ServletContextEvent event) {
}

}

然後要在web.xml裡面配置監聽器
<listener>
<listener-class>
com.listener.NFDFlightDataTaskListener
</listener-class>
</listener>

5. 怎樣用java做個定時器,每個星期一中午12點整執行doXX這一動作。越詳細越好.用監聽哥跪謝!

主類:
package tiwen4; import java.util.Calendar; import java.util.Timer; public class quartz { public static void main(String[] args) { try{ Calendar cal = Calendar.getInstance();//設置定時時間 cal.add(Calendar.DATE, 0);//表示從今天的12點開始跑起來,如果當前時間超過12點會馬上跑一次,否則等12點再跑第一次 cal.set(Calendar.HOUR_OF_DAY, 12);//24小時制的,12就是中午12點 cal.set(Calendar.MINUTE, 0);//分 cal.set(Calendar.SECOND, 0);//秒 Timer processTimer = new Timer(); processTimer.scheleAtFixedRate(new ProcessClass(), cal.getTime(), 86400000);//86400000是24小時,即24小時跑一次 }catch(Exception e){ e.printStackTrace(); }finally{ } } }

定時器調用的類--我在這里只是輸出了一下~你也可以自己加函數:
package tiwen4; import java.util.TimerTask; public class ProcessClass extends TimerTask { @Override public void run() { // TODO Auto-generated method stub System.out.println("輸出了哈哈");// } }

我上面用的只是一種方式,其實定時方式有很多的linux和window都有自帶的定時器,可以直接調用,也可以用上面所說的quartz包帶的框架等等

6. java怎樣啟動定時器

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);
}

7. java三十分鍾循環一次代碼

這個有兩種方法:
一、你設置一個定時器,讓定時器每個三十分鍾執行一次,然後調用相關的程序。
二、你把程序放在線程里,然後每次循環處理完之後調用sleep函數,讓線程睡眠三十分鍾之後繼續循環。
兩種方法的區別:
第一種方法用定時器實現,系統記錄時間,時間達到條件就會執行,期間不佔用資源;
第二種方法是讓程序睡眠三十分鍾,在睡眠期間線程鎖還是被當前的這個線程佔用著的,其他線程將得不到執行的機會。

閱讀全文

與java定時器並發相關的資料

熱點內容
教小孩編程的軟體哪個好 瀏覽:99
三控燈的plc編程邏輯如何理解 瀏覽:879
綜合備份如何恢復數據 瀏覽:137
手機qq2012有幾個版本 瀏覽:578
vfp子程序 瀏覽:368
選取文件夾 瀏覽:16
網線怎麼分接路由器怎麼設置路由器設置密碼 瀏覽:188
vstt文件 瀏覽:22
用郵箱發文件怎麼發 瀏覽:331
廣元市做網路課程有哪些 瀏覽:747
win10打開的文件置於最前端 瀏覽:570
一號農業文件是多少 瀏覽:206
pdf文件打開不能正常顯示文字 瀏覽:70
jsp無刷新 瀏覽:261
編程貓怎麼下載到電腦 瀏覽:888
vbnet和excel文件 瀏覽:454
科密資料庫如何安裝 瀏覽:725
微信朋友圈重復發三遍內容 瀏覽:957
蘋果4屏幕總成好換嗎 瀏覽:386
qq縮小之後就找不到了 瀏覽:532

友情鏈接