top button
Flag Notify
    Connect to us
      Site Registration

Site Registration

What is Java Timer Class? How to schedule a task to run after specific interval?

+1 vote
413 views
What is Java Timer Class? How to schedule a task to run after specific interval?
posted Sep 25, 2017 by anonymous

Share this question
Facebook Share Button Twitter Share Button LinkedIn Share Button

1 Answer

0 votes

There is often a need in applications to run some particular task in background to accomplish some work in an interval. The example can be, service running in background for cleanup of application just like, we have the Java Garbage collection.

In this article, i will show you 3 different ways to achieve this

They are as follows

using simple thread
using TimerTask
using ScheduledExecutorService
Using Simple Thread

This is very simple, which creates the simple thread puts it run in forever with use of while loop and makes use of sleep method to put the interval between running.

This is simply fast and quick way to achieve it

Following is code for this.

public class Task1 {
public static void main(String[] args) {
  // run in a second
  final long timeInterval = 1000;
  Runnable runnable = new Runnable() {
  public void run() {
    while (true) {
      // ------- code for task to run
      System.out.println("Hello !!");
      // ------- ends here
      try {
       Thread.sleep(timeInterval);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      }
    }
  };
  Thread thread = new Thread(runnable);
  thread.start();
  }
}

Using the Timer and TimerTask

Previous method we saw was very quickest possible, but it lacks some functionality

This has much more benefits than previous they are as follows

Control over when start and cancel task

First execution can be delayed if wanted, provides useful

In this we use, Timer class for scheduling purpose and TimerTask is used for enclosing task to be executed inside its run() method.

Timer instance can be shared to schedule the multiple task and it is thread-safe.

When Timer constructor is called , it creates one thread and this single thread is used any scheduling of task.

For our purpose, we use Timer#scheduleAtFixedRate

Following code shows the use of Timer and TimerTask

import java.util.Timer;
import java.util.TimerTask;
public class Task2 {
  public static void main(String[] args) {
    TimerTask task = new TimerTask() {
      @Override
      public void run() {
        // task to run goes here
        System.out.println("Hello !!!");
      }
    };
    Timer timer = new Timer();
    long delay = 0;
    long intevalPeriod = 1 * 1000; 
    // schedules the task to be run in an interval 
    timer.scheduleAtFixedRate(task, delay,
                                intevalPeriod);
  } // end of main
}

These classes are classes existed from the JDK 1.3.

Using ScheduledExecutorService

This is introduced in java.util.concurrent from Java SE 5 as Concurrency utilities. This is preferred way to achieve the goal.

It provides following benefits as compared to previous solutions

pool of threads is used to execute as compared TImer`s single thread

Provides the flexibility for delaying first execution

Provides nice conventions for providing the time intervals

Following code shows use of same,

In this, we use ScheduledExecutorService#scheduleAtFixedRate as shown , it takes param as runnable which particular piece of code we want to run , initialdelay for first execution

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Task3 {
  public static void main(String[] args) {
    Runnable runnable = new Runnable() {
      public void run() {
        // task to run goes here
        System.out.println("Hello !!");
      }
    };
    ScheduledExecutorService service = Executors
                    .newSingleThreadScheduledExecutor();
    service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);
  }
}
answer Oct 9, 2017 by Manikandan J
Similar Questions
+2 votes

You are given two processes and each process is having four threads. One of the thread is having performance issue. How will you find out that thread which is having problem.

0 votes

I heard the term "worker thread" and other types of threads such as "system thread" and "user thread".
For me a thread is nothing but a lite weight process and multi-threaded design is chosen for a software development when there are multiple task in the application/system and those tasks can be executed independently.
I want to know when these different terms are used like worker thread, user thread and system thread ?

+1 vote

I wrote a multi-threaded program using pthread library, but I want execution of threads in a specific order.
What I have to do ?

...