Kushal Paudyal May 17th, 2012
This is a simple tutorial that shows how easily (and without depending on third party APIs) you can write a simple scheduler in Java. Java comes with build in capability for scheduling using java.util.Timer class and java.util.TimerTask class.
package com.kushal.tools;
/**
* @Author Kushal Paudyal
* Scheduling a task using Java in-house scheduler
* Created : 2011/04/28
* Last Modified: 2011/04/28
*/
import java.util.Timer;
import java.util.TimerTask;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Date;
public final class SchedulerUsingJavaUtil extends TimerTask {
private final static long FREQUENCY_ONE_DAY = 1000 * 60 * 60 * 24;
private final static int ONE_DAY = 0;
private final static int HOUR_AM = 10;
private final static int MINUTES = 52;
/**
* Construct and use a TimerTask and Timer.
*/
public static void main(String[] arguments) {
TimerTask scheduledTask = new SchedulerUsingJavaUtil();
Timer timer = new Timer();
/**
* Schedules the specified task for repeated fixed-rate execution,
* beginning at the specified time. Subsequent executions take place at
* approximately regular intervals, separated by the specified period.
* In fixed-rate execution, each execution is scheduled relative to the
* scheduled execution time of the initial execution. If an execution is
* delayed for any reason (such as garbage collection or other
* background activity), two or more executions will occur in rapid
* succession to "catch up." In the long run, the frequency of execution
* will be exactly the reciprocal of the specified period (assuming the
* system clock underlying Object.wait(long) is accurate).
*
* Fixed-rate execution is appropriate for recurring activities that are
* sensitive to absolute time, such as ringing a chime every hour on the
* hour, or running scheduled maintenance every day at a particular
* time. It is also appropriate for recurring activities where the total
* time to perform a fixed number of executions is important, such as a
* countdown timer that ticks once every second for ten seconds.
* Finally, fixed-rate execution is appropriate for scheduling multiple
* repeating timer tasks that must remain synchronized with respect to
* one another.
*
*
* Parameters:
* task - task to be scheduled.
* firstTime - First time at which task is to be executed.
* period - time in milliseconds between successive task executions.
* Throws: IllegalArgumentException - if
* time.getTime() is negative. IllegalStateException - if task was
* already scheduled or cancelled, timer was cancelled, or timer thread
* terminated.
*/
timer.scheduleAtFixedRate(scheduledTask, getFirstRunTime(),FREQUENCY_ONE_DAY);
}
/**
* Implements TimerTask's abstract run() method.
*/
public void run() {
System.out.println("Doing some task..."+new Date());
}
/**
* Create a time when scheduler needs to run first
*/
private static Date getFirstRunTime() {
/**
* Get Today's Calendar
*/
Calendar tomorrow = new GregorianCalendar();
/**
* Add one day to get tomorrow's calendar
*/
tomorrow.add(Calendar.DATE, ONE_DAY);
/**
* Set the scheduled time for tomorrow.
*/
Calendar firstRunTime = new GregorianCalendar(
tomorrow.get(Calendar.YEAR),
tomorrow.get(Calendar.MONTH),
tomorrow.get(Calendar.DATE),
HOUR_AM,
MINUTES);
return firstRunTime.getTime();
}
}
Sanjaal.com is owned and maintained by Sanjaal Corps, Nepal. The company offers Webhosting and Domain Registration Services, IT Solutions and Business Analysis. Sanjaal.com website features H1B Visa Information, Entertainment Portal, Link Directory Service, Free Articles, Free Open Source Tutorials on Java and J2EE Platform, Digital Photography, High Resolution Picture Gallery and Free Reliable Image Hosting Services. Future plan includes Open Source Software Development Portal, Technical Solutions and Customizable Movie and Music Arena. We would be introducing data backup, data recovery, data hosting and voip solutions. Stay free from phishing – our website does not ask for your credit card and banking information. Happy Surfing!

Originally posted 2008-07-25 11:24:04.
Tags: java thread, java thread life cycle, java thread life cycle diagram, java thread life cycle state stop run, java thread lifecycle image, java thread lifecyle explained, yield suspend blocked running runnable