Call a method at fixed time in Java
How do I call a method at a particular time?
For example to call the method at 6:00 and 13:00.
I'm working at a desktop a开发者_JAVA技巧pplication for Windows.
Have a look at the Timer
and TimerTask
classes. You can schedule a thread to execute at a specific time, or repeatedly.
public class Alarm {
Timer _timer;
public Alarm() {
// Create a Date corresponding to 10:30:00 AM today.
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 = new Timer();
_timer.schedule(new AlarmTask(), alarmTime);
}
class AlarmTask extends TimerTask {
/**
* Called on a background thread by Timer
*/
public void run() {
// Do your work here; it's 10:30 AM!
// If you don't want the alarm to go off again
// tomorrow (etc), cancel the timer
timer.cancel();
}
}
}
An alternative to to use Quartz. It's effectively the same as Timer
or TimerTask
, but it does allow for a description of what must run using a cron
style syntax.
Since Java 1.5 there is a preferable way, if you need to be more strict: ScheduledThreadPoolExecutor
:
This class is preferable to Timer when multiple worker threads are needed, or when the additional flexibility or capabilities of ThreadPoolExecutor (which this class extends) are required.
There you choose between scheduleAtFixedRate()
and scheduleWithFixedRate()
. More details on the usage can be found in the linked javadoc.
精彩评论