nicky
nicky

Reputation: 3908

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 application for Windows.

Upvotes: 1

Views: 11057

Answers (3)

Scott Smith
Scott Smith

Reputation: 3986

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

Upvotes: 10

Bozho
Bozho

Reputation: 597116

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.

Upvotes: 3

gpampara
gpampara

Reputation: 12049

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.

Upvotes: 4

Related Questions