Java Timer class executes a task or job in a specific time interval either once or repeatedly. It is part of the Java utility class. This class is also used to schedule jobs on a specified date using its in-built methods.
If we want to create our own task, we have to extend the TimerTask class which is an abstract class. The timer class uses this task for scheduling. In other words, Timer is used as a scheduler and TimerTask is the job that needs to be scheduled.
Table of Contents
Java Timer Constructors
We can create Timer object using the below constructors
Constructor | Description |
---|---|
Timer() | This is the default timer |
Timer(boolean isDaemon) | This creates a timer with its associated thread to run as a daemon |
Timer(String name) | This creates a timer with its associated thread with the specified name |
Timer(String name, boolean isDaemon) | This creates a timer with its associated thread with specified name and can be run as a daemon |
Timer t = new Timer();
Java Timer Methods
Below are the most commonly used Java Timer methods.
Method | Description | Parameters |
---|---|---|
void cancel() | Terminates the timer. It cancels all the scheduled tasks except the current running task if any | |
int purge() | This removes all the cancelled tasks from the queue and returns the number of tasks removed. | |
void schedule(TimerTask task, Date time) | Schedules the specified task to run at the specified time. If the time is past, then it is immediately taken for execution | task - task to be performed time - time at which task has to be performed |
void schedule(TimerTask task,long delay) | Schedules a specified task after the specified delay | task - task to be performed delay - delay in milliseconds before task execution |
void schedule(TimerTask task, Date firsttime, long period) | Schedules a specific task on the specific start for repeated execution with the mentioned periodic interval | task - task to be performed firstime - start time of the task for the execution period - interval with which task has to be executed |
void schedule(TimerTask task, long delay, long period) | Schedules a specific task for repeated execution after the specified delay with the mentioned periodic interval | task - task to be performed delay - delay in milliseconds before task execution period - interval with which task has to be executed |
vois scheduleAtFixedRate(TimerTask task, Date firsttime, long period) | Schedules a specific task with fixed rate execution starting with the specific date with the mentioned periodic intervals | task - task to be performed firstime - start time of the task for the execution period - interval with which task has to be executed |
void scheduleAtFixedRate(TimerTask task,long delay,long period) | Schedules a specific task for repeated fixed rate execution after the specified delay with the mentioned periodic interval | task - task to be performed delay - delay in milliseconds before task execution period - interval with which task has to be executed |
Timer Exceptions
The Java Timer class throws the below exceptions while scheduling tasks:
- NullPointerException – when the task or time is null
- IllegalArgumentException – when the time or delay or period is negative
- IllegalStateException – if the task was already scheduled or canceled, the timer was canceled or timer thread was terminated
Java Timer: Schedule a task using schedule(task, time)
Let’s see a simple example of scheduling a task using a java timer at a specified time. First, we create a new timer object ‘t’. Then, we create a TimerTask object “task” and provide the required code by overriding the run method. We then schedule the task using the timer at the specified time(here, current time).
import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TimerDemo { public static void main(String[] args) { Timer t = new Timer(); TimerTask task = new TimerTask(){ public void run() { for(int i=1;i<=5;i++) { System.out.println("Task : " + i); } } }; t.schedule(task, new Date()); } }
Task : 1 Task : 2 Task : 3 Task : 4 Task : 5
Java Timer: Schedule a task using schedule(task, delay)
In the below example, we are scheduling the task for execution after a delay of 5 seconds. If you see the output, you can clearly see that the Java Timer executed the task after a delay of 5 seconds.
import java.util.Timer; import java.util.TimerTask; import java.util.Date; public class TimeDemoDelay { public static void main(String[] args) { Timer t = new Timer(); TimerTask task = new TimerTask() { public void run() { System.out.println("Timer executed at time: "+ new Date()); } }; System.out.println("Current time: " + new Date()); t.schedule(task, 5000); } }
Current time: Sat Jun 27 16:01:03 IST 2020 Timer executed at time: Sat Jun 27 16:01:08 IST 2020
Java Timer: Schedule a task using schedule(task, time, period)
In the below example we can see that we can schedule a task for repeated execution at regular time intervals beginning at the specified time.
Here, the Java Timer executes the task starting from the current time and continues its execution after every 2 seconds. Since we want to cancel the task after a specific time, we call cancel method based on a certain condition, else it will continuously execute. In our example, we have set the condition until i=5. Once it reaches this limit, the Java Timer will cancel the task and stop the execution.
import java.util.Timer; import java.util.TimerTask; import java.util.Date; public class TimerDemo1 { public static void main(String[] args) { Timer t = new Timer(); TimerTask task = new TimerTask() { int i=1; public void run() { System.out.println("Timer executed at :" + new Date()); if(i==5) t.cancel(); i=i+1; } }; System.out.println("Current time: " + new Date()); t.schedule(task, new Date(), 2000); } }
Current time: Sat Jun 27 16:13:33 IST 2020 Timer executed at :Sat Jun 27 16:13:33 IST 2020 Timer executed at :Sat Jun 27 16:13:35 IST 2020 Timer executed at :Sat Jun 27 16:13:37 IST 2020 Timer executed at :Sat Jun 27 16:13:39 IST 2020 Timer executed at :Sat Jun 27 16:13:41 IST 2020
Java Timer: Schedule a task using schedule(task, delay, period)
In the below example, we schedule a task for repeated execution after a specific delay(which is 5 seconds) and the Java Timer executes this task in a specific time interval. Even though the time interval is 1 second, the thread executes after every 2 seconds due to another thread that sleeps for 2 seconds. Hence, if you see only the 1st task executes with a delay of a total of 3 seconds, remaining executes every 2 seconds.
import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TimerDelayPeriod { public static void main(String[] args) { Timer t = new Timer(); TimerTask task = new TimerTask() { int i=1; public void run() { System.out.println("Timer executed at :" + new Date()); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(i==5) t.cancel(); i=i+1; } }; System.out.println("Current time: " + new Date()); t.schedule(task, 5000, 1000); } }
Current time: Sun Jun 28 20:04:37 IST 2020 Timer executed at :Sun Jun 28 20:04:42 IST 2020 Timer executed at :Sun Jun 28 20:04:44 IST 2020 Timer executed at :Sun Jun 28 20:04:46 IST 2020 Timer executed at :Sun Jun 28 20:04:48 IST 2020 Timer executed at :Sun Jun 28 20:04:50 IST 2020
Schedule a task using scheduleAtFixedRate(task,time,period)
This method is useful when we want repeated execution at a fixed rate with a periodic interval starting from a particular time. In the below example, we can see that the task execution interval is 1 second, but the Java Timer executes the task every 3 seconds due to another thread that sleeps for 3 seconds. Since this 1 second covers within the 3 seconds limit, it does not wait for another extra 1 second and starts the next task execution immediately.
import java.util.Timer; import java.util.TimerTask; import java.util.Date; public class TimerFixedRateDemo { public static void main(String[] args) { Timer t = new Timer(); TimerTask task = new TimerTask() { int i=1; public void run() { System.out.println("Task executed at time: " + new Date()); try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(i==5) t.cancel(); i=i+1; } }; t.scheduleAtFixedRate(task, new Date(), 1000); } }
Task executed at time: Sun Jun 28 22:54:00 IST 2020 Task executed at time: Sun Jun 28 22:54:03 IST 2020 Task executed at time: Sun Jun 28 22:54:06 IST 2020 Task executed at time: Sun Jun 28 22:54:09 IST 2020 Task executed at time: Sun Jun 28 22:54:12 IST 2020
Schedule a task using scheduleAtFixedRate(task,delay,period)
Here, we start the task execution after a delay of 2 seconds with a periodic interval of 1 second. The Java Timer executes the task for a period of 3 seconds due to another thread execution which sleeps for 3 seconds. Since the interval of 1-second covers within this sleep limit, next thread execution starts immediately without any delay.
import java.util.Timer; import java.util.TimerTask; import java.util.Date; public class TimerFixedRateDemo { public static void main(String[] args) { Timer t = new Timer(); TimerTask task = new TimerTask() { int i=1; public void run() { System.out.println("Task executed at time: " + new Date()); try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(i==5) t.cancel(); i=i+1; } }; System.out.println("Current time: " + new Date()); t.scheduleAtFixedRate(task, 2000, 1000); } }
Current time: Sun Jun 28 22:55:59 IST 2020 Task executed at time: Sun Jun 28 22:56:01 IST 2020 Task executed at time: Sun Jun 28 22:56:04 IST 2020 Task executed at time: Sun Jun 28 22:56:07 IST 2020 Task executed at time: Sun Jun 28 22:56:10 IST 2020 Task executed at time: Sun Jun 28 22:56:13 IST 2020
Creating own Java TimerTask Class
We can create our own TimerTask class by extending the abstract class TimerTask as shown in the below example. Every TimerTask abstract class has a run method that we need to override to perform any operation. In the below example, the Java Timer executes the task every second and after 5 seconds, the task execution cancels and stops.
import java.util.Timer; import java.util.TimerTask; import java.util.Date; public class TimerTaskDemo extends TimerTask { public void run() { System.out.println("Executing task from my own timer task class"); } public static void main(String[] args) throws InterruptedException { Timer t = new Timer(); TimerTask task = new TimerTaskDemo(); t.schedule(task, new Date(),1000); Thread.sleep(5000); t.cancel(); System.out.println("Timer cancelled"); } }
Executing task from my own timer task class Executing task from my own timer task class Executing task from my own timer task class Executing task from my own timer task class Executing task from my own timer task class Timer cancelled