是否可以在特定時間在java中調用方法?例如,我有這樣一段代碼:如何在java中調用特定時間的方法?
class Test{
....
// parameters
....
public static void main(String args[]) {
// here i want to call foo at : 2012-07-06 13:05:45 for instance
foo();
}
}
這怎麼可以在java中完成?
是否可以在特定時間在java中調用方法?例如,我有這樣一段代碼:如何在java中調用特定時間的方法?
class Test{
....
// parameters
....
public static void main(String args[]) {
// here i want to call foo at : 2012-07-06 13:05:45 for instance
foo();
}
}
這怎麼可以在java中完成?
使用java.util.Timer類,您可以創建一個計時器並安排它在特定時間運行。
下面的例子:
//The task which you want to execute
private static class MyTimeTask extends TimerTask
{
public void run()
{
//write your code here
}
}
public static void main(String[] args) {
//the Date and time at which you want to execute
DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = dateFormatter .parse("2012-07-06 13:05:45");
//Now create the time and schedule it
Timer timer = new Timer();
//Use this if you want to execute it once
timer.schedule(new MyTimeTask(), date);
//Use this if you want to execute it repeatedly
//int period = 10000;//10secs
//timer.schedule(new MyTimeTask(), date, period);
}
它是可能的,如http://quartz-scheduler.org/
石英是可以與集成,或者伴隨虛擬的任何Java EE或一個全功能的,開源的作業調度服務,我會用一個庫Java SE應用程序 - 從最小的獨立應用程序到最大的電子商務系統。 Quartz可以用來創建執行數十,數百乃至數萬個作業的簡單或複雜的計劃;作業的任務被定義爲標準的Java組件,它可以執行幾乎任何你可能編程的任務。
你可以使用類Timer
從技術文檔:
用於線程調度將來執行任務的 設施後臺線程。可以安排一次性執行任務,或者定期重複執行任務。
方法schedule(TimerTask task, Date time)
正是你想要的:安排指定的任務在指定的時間執行。
如果您需要安排cron
格式,quartz將是一個很好的解決方案。 (quartz cron like schedule)
據我所知,你可以使用Quartz-scheduler這個。我還沒有使用它,但很多人都向我推薦它。
可以使用ScheduledExecutorService,這是「一個更靈活更換爲Timer
/TimerTask
組合」(根據Timer
's javadoc):
long delay = ChronoUnit.MILLIS.between(LocalTime.now(), LocalTime.of(13, 5, 45));
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(task, delay, TimeUnit.MILLISECONDS);
如果你正在談論SE則Timer類可能是什麼您正在尋找自Java 5以來可用的。
如果您需要在應用程序服務器上下文中指定一些東西,我建議您查看EJB 3.0以來的EJB定時器http://www.javabeat.net/2007/03/ejb-3-0-timer-services-an-overview/。
另外,根據你真正想要做什麼,你可以詳細說明如果使用cron作業(或任何其他基於OS的定時器方法)會更合適,即你不想或不能擁有虛擬機一直在運行。
這是可能的。您可以使用Timer
和TimerTask
在某個時間安排一種方法。
例如:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10);
calendar.set(Calendar.MINUTE, 30);
calendar.set(Calendar.SECOND, 0);
Date alarmTime = calendar.getTime();
Timer _timer = new Timer();
_timer.schedule(foo, alarmTime);
請參考以下鏈接:
Timer t=new Timer();
t.schedule(new TimerTask() {
public void run() {
foo();
}
}, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2012-07-06 13:40:20"));
你在哪裏使用'period'? – Sami 2012-07-06 11:57:05
編輯答案 – 2012-07-06 12:02:05
定時器的javadoc建議使用Java 5中引入的'ScheduledThreadPoolExecutor':http://stackoverflow.com/a/11361397/829571 – assylias 2016-10-25 12:57:15