$show=/label

How do I make a delay in Java? Pausing Execution with Sleep

SHARE:

A quick guide to delay the code execution in java using Thread.sleep() and TimeUnit.sleep() methods. And also, Pausing execution sleep for some second

1. Overview


In this article, You'll learn how to delay the code execution for some seconds or minutes in java. This quite simple and easy to force the code to sleep or pause for some time and do the remaining execution or waiting for another task to complete.

You might be seeing this is needed when you have any failures or connectivity issues in the application then immediately you don't want to execute tasks. So, You must have to wait for sometime before running the same task.

This is a common use case in every realtime application.

Let us explore the different ways to do the delay in java.

How do I make a delay in Java? Pausing Execution with Sleep


2. Delay with Thread.sleep()


A good and simple way is to call the Thread.sleep(long millies) method from where you want to put the delay in code. Actually, when you start any program in the java, it creates a main thread that controls the execution of the program. So, all threads are spawned from the main thread and the main thread is called as parent thread to all user-defined threads.

Syntax:

public static native void sleep(long millis) throws InterruptedException;

This is a native method that is taken from the C/C++ language.

Example:


The below example program is to sleep the thread for 5 seconds and continue its execution.
public class DelayWithThreadSleep {

	public static void main(String[] args) {

		System.out.println("Program Started...");
		System.out.println("Current Thread name : " + Thread.currentThread().getName());

		// do some task

		try {
			System.out.println("Sleepin for 5 seconds");
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			System.out.println("Thread is interrupted");
		}
		System.out.println("Code delay completed.");

		System.out.println("Program Ended");

	}

}
Output:
Program Started...
Current Thread name : main
Sleepin for 5 seconds
Code delay completed.
Program Ended
If you need to use the Thread.sleep() method in many methods it is good to wrap it inside a private method as below. And also it is good practice to keep the sleep() method inside try/catch block to handle the exception properly.

If the thread is interrupted then it will come out from sleep state.
public class DelayWithThreadSleepUtil {

	public static void main(String[] args) {

		System.out.println("Program Started...");

		System.out.println("Started task 1");

		sleep(5000);

		System.out.println("Code delay completed for task 1");

		System.out.println("Started task 2");
		sleep(3000);

		System.out.println("Code delay completed for task 2");

		System.out.println("Program Ended");

	}

	private static void sleep(long millies) {
		try {
			Thread.sleep(millies);
		} catch (InterruptedException e) {
			System.out.println("Thread is interrupted");
			Thread.currentThread().interrupt();
		}
	}

}

3. Delay with TimeUnit.SECONDS or TimeUnit.MINUTES


TimeUnit class is added in the java.util.concurrent package which is to make the code easy to read. This class comes with different types of time measurements such as MILLISECONDS, NANOSECONDS, MICROSECONDS, SECONDS, MINUTES, HOURS, DAYS.

This follows the pattern TimeUnit.XXX with sleep for n number of based on the time unit type. But, this method internally calls the Thread.sleep() method.
import java.util.concurrent.TimeUnit;

public class DelayWithTimeUntSleep {

	public static void main(String[] args) {

		System.out.println("Task 1 Started with TimeUnit Seconds");

		try {
			TimeUnit.SECONDS.sleep(5);
		} catch (InterruptedException e) {
			System.out.println("Thread is interuppted....");
		}

		System.out.println("Task 1 Ended");
		
		System.out.println("Task 2 Started with TimeUnit Seconds");

		try {
			TimeUnit.MINUTES.sleep(1);
		} catch (InterruptedException e) {
			System.out.println("Thread is interuppted....");
		}

		System.out.println("Task 2 Ended");

	}

}
Output:
Task 1 Started with TimeUnit Seconds
Task 1 Ended
Task 2 Started with TimeUnit Seconds
Task 2 Ended
The main drawback of this is that does not work properly for smaller sleep intervals in milliseconds and nanoseconds. And also, If you use this method inside any loops (for loop) then it might end up in the more timely execution.

4. Delay with an ExecutorService Model


An ExecutorService that can schedule commands to run after a given delay, or to execute periodically. Java has the built-in capability to run the piece of code run after a particular delay or at a fixed rate.

ScheduledExecutorService is a base interface for the ExecutorService.

The below example is to run the code with a fixed delay of 1000 milliseconds or 1 second. After running this code, you will not see anything on the console for the first 1 second. Because we have mentioned that delay to the scheduler. After completion of the delay, it will run the NewTask run() method and prints the "Task Completed".


import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class DelayWithExecutorService {

	public static void main(String[] args) {

		ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();

		executorService.schedule(new NewTask(), 1000, TimeUnit.MILLISECONDS);

	}

}

class NewTask implements Runnable {

	@Override
	public void run() {

		System.out.println("Task completed");
	}

}

Output:

Task completed

But, this task will be executed only once and not executed for every 1 second.

If you want to run the same task for every 5 seconds with initial delay 1 second then you should use scheduleAtFixedRate() method with initial and fixed dealy.
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();

executorService.scheduleAtFixedRate(new NewTask(), 1000, 5000, TimeUnit.MILLISECONDS);

Output:
Task started
Task completed
Task started
Task completed
Task started
Task completed
If in case the task takes time more then 5 seconds then executor service does not trigger the next task untill the previous one is completed. So, we no need to worry about all these cases manually.

Look at the below example that each task takes 7 seconds but the fixed rate is 5 seconds.

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class DelayWithExecutorServiceFixedRate {

	public static void main(String[] args) {

		ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();

		executorService.scheduleAtFixedRate(new NewTask(), 1000, 5000, TimeUnit.MILLISECONDS);

	}

}

class NewTask implements Runnable {

	@Override
	public void run() {

		System.out.println("Task started");

		try {
			System.out.println("sleeping 7 seconds..");
			Thread.sleep(7000);
		} catch (InterruptedException e) {
			System.out.println("thread is interrputed");
		}

		System.out.println("Task completed");
	}

}
Output:
Task started
sleeping 7 seconds..
Task completed
Task started
sleeping 7 seconds..
Task completed
Task started
sleeping 7 seconds..
Task completed
Task started
sleeping 7 seconds..
Task completed

Look at the output, Execution of each task did not get overlapped with the previous run. So, ExecutorService handles well internally each thread state.

5. Conclusion


In this article, You've seen the different ways to delay the thread in java using Thread.sleep(), TimeUnit.SECONDS.sleep() and with executorService.schedule() method.

All examples shown are over GitHub and links are given below.



COMMENTS

BLOGGER

About Us

Author: Venkatesh - I love to learn and share the technical stuff.
Name

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,16,Arrays,7,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,5,Collections,22,Collector,1,Command Line,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,81,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,4,Dictionary,1,Difference,1,Download,1,Eclipse,2,Efficiently,1,Error,1,Errors,1,Exception,1,Exceptions,3,Fast,1,Files,9,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,4,Grant,1,Grep,1,HashMap,1,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,5,Iterate,2,Jackson API,3,Java,29,Java 10,1,Java 11,5,Java 12,5,Java 13,2,Java 14,2,Java 8,66,Java 8 Difference,2,Java 8 Stream Conversions,2,java 8 Stream Examples,3,Java 9,1,Java Conversions,11,Java Design Patterns,1,Java Files,1,Java Program,2,Java Programs,65,java.lang,5,java.util. function,1,jQuery,1,Kotlin,10,Kotlin Conversions,3,Kotlin Programs,6,Lambda,1,lang,29,Leap Year,1,live updates,1,Logging,1,Mac OS,2,Math,1,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,1,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,21,String,58,String Programs,9,String Revese,1,Swing,1,System,1,Tags,1,Threads,10,Tomcat,1,Tomcat 8,1,Troubleshoot,16,Unix,2,Updates,3,util,5,While Loop,1,
ltr
item
JavaProgramTo.com: How do I make a delay in Java? Pausing Execution with Sleep
How do I make a delay in Java? Pausing Execution with Sleep
A quick guide to delay the code execution in java using Thread.sleep() and TimeUnit.sleep() methods. And also, Pausing execution sleep for some second
https://1.bp.blogspot.com/-Jhmsb-3v1RQ/Xyra_GY1iZI/AAAAAAAAC4Q/WDAid8CBPN0Q1WS7WRSj-sYGGTolR9wJgCLcBGAsYHQ/w640-h348/How%2Bdo%2BI%2Bmake%2Ba%2Bdelay%2Bin%2BJava%253F%2BPausing%2BExecution%2Bwith%2BSleep.png
https://1.bp.blogspot.com/-Jhmsb-3v1RQ/Xyra_GY1iZI/AAAAAAAAC4Q/WDAid8CBPN0Q1WS7WRSj-sYGGTolR9wJgCLcBGAsYHQ/s72-w640-c-h348/How%2Bdo%2BI%2Bmake%2Ba%2Bdelay%2Bin%2BJava%253F%2BPausing%2BExecution%2Bwith%2BSleep.png
JavaProgramTo.com
https://www.javaprogramto.com/2020/08/how-to-make-delay-in-java-thread-sleep.html
https://www.javaprogramto.com/
https://www.javaprogramto.com/
https://www.javaprogramto.com/2020/08/how-to-make-delay-in-java-thread-sleep.html
true
3124782013468838591
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content