Java Thread Sleep Example

Introduction

The sleep method in Java is used to pause the execution of the current thread for a specified period of time. This method is part of the Thread class and allows you to temporarily suspend a thread's execution without terminating it. The sleep method can throw an InterruptedException, so it must be handled using a try-catch block.

Table of Contents

  1. sleep Method Variants
  2. Example: Using sleep(long millis) Method
  3. Example: Using sleep(long millis, int nanos) Method
  4. Handling InterruptedException
  5. Conclusion

1. sleep Method Variants

sleep(long millis)

This method pauses the execution of the current thread for the specified number of milliseconds.

Syntax:

public static void sleep(long millis) throws InterruptedException

sleep(long millis, int nanos)

This method pauses the execution of the current thread for the specified number of milliseconds plus nanoseconds.

Syntax:

public static void sleep(long millis, int nanos) throws InterruptedException

2. Example: Using sleep(long millis) Method

Let's create an example to demonstrate how to use the sleep(long millis) method to pause the execution of a thread.

Example:

class MyThread extends Thread {
    public MyThread(String name) {
        super(name); // Set the name of the thread
    }

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + " is running. Iteration: " + i);
            try {
                Thread.sleep(1000); // Sleep for 1000 milliseconds (1 second)
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        MyThread thread1 = new MyThread("Thread-1");
        MyThread thread2 = new MyThread("Thread-2");

        thread1.start(); // Start thread1
        thread2.start(); // Start thread2
    }
}

Output:

Thread-1 is running. Iteration: 0
Thread-2 is running. Iteration: 0
Thread-1 is running. Iteration: 1
Thread-2 is running. Iteration: 1
Thread-1 is running. Iteration: 2
Thread-2 is running. Iteration: 2
Thread-1 is running. Iteration: 3
Thread-2 is running. Iteration: 3
Thread-1 is running. Iteration: 4
Thread-2 is running. Iteration: 4

Explanation:

  • The MyThread class extends the Thread class and sets the name of the thread.
  • The run method prints the name of the current thread and the iteration count, then sleeps for 1000 milliseconds (1 second).
  • In the main method, two MyThread objects are created and started.
  • Each thread prints its name and iteration count, then sleeps for 1 second before continuing to the next iteration.

3. Example: Using sleep(long millis, int nanos) Method

This example demonstrates using the sleep(long millis, int nanos) method to pause the execution of a thread for a specified number of milliseconds plus nanoseconds.

Example:

class MyThread extends Thread {
    public MyThread(String name) {
        super(name); // Set the name of the thread
    }

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + " is running. Iteration: " + i);
            try {
                Thread.sleep(1000, 500000); // Sleep for 1000 milliseconds plus 500,000 nanoseconds (0.5 milliseconds)
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        MyThread thread1 = new MyThread("Thread-1");
        MyThread thread2 = new MyThread("Thread-2");

        thread1.start(); // Start thread1
        thread2.start(); // Start thread2
    }
}

Output:

Thread-1 is running. Iteration: 0
Thread-2 is running. Iteration: 0
Thread-1 is running. Iteration: 1
Thread-2 is running. Iteration: 1
Thread-1 is running. Iteration: 2
Thread-2 is running. Iteration: 2
Thread-1 is running. Iteration: 3
Thread-2 is running. Iteration: 3
Thread-1 is running. Iteration: 4
Thread-2 is running. Iteration: 4

Explanation:

  • The MyThread class extends the Thread class and sets the name of the thread.
  • The run method prints the name of the current thread and the iteration count, then sleeps for 1000 milliseconds plus 500,000 nanoseconds (0.5 milliseconds).
  • In the main method, two MyThread objects are created and started.
  • Each thread prints its name and iteration count, then sleeps for 1.0005 seconds before continuing to the next iteration.

4. Handling InterruptedException

The sleep method throws an InterruptedException if the thread is interrupted while sleeping. This exception must be handled using a try-catch block.

Example:

class MyThread extends Thread {
    public MyThread(String name) {
        super(name); // Set the name of the thread
    }

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + " is running. Iteration: " + i);
            try {
                Thread.sleep(1000); // Sleep for 1000 milliseconds (1 second)
            } catch (InterruptedException e) {
                System.out.println(Thread.currentThread().getName() + " was interrupted.");
                return; // Exit the run method if interrupted
            }
        }
    }

    public static void main(String[] args) {
        MyThread thread1 = new MyThread("Thread-1");

        thread1.start(); // Start thread1

        try {
            Thread.sleep(3000); // Main thread sleeps for 3 seconds
            thread1.interrupt(); // Interrupt thread1 after 3 seconds
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Output:

Thread-1 is running. Iteration: 0
Thread-1 is running. Iteration: 1
Thread-1 is running. Iteration: 2
Thread-1 was interrupted.

Explanation:

  • The MyThread class extends the Thread class and sets the name of the thread.
  • The run method prints the name of the current thread and the iteration count, then sleeps for 1000 milliseconds (1 second).
  • If the thread is interrupted while sleeping, the InterruptedException is caught, and a message is printed indicating that the thread was interrupted. The run method then exits.
  • In the main method, a MyThread object is created and started.
  • The main thread sleeps for 3 seconds and then interrupts thread1.

5. Conclusion

The sleep method in Java is used for controlling the execution flow of threads. By using the sleep(long millis) and sleep(long millis, int nanos) methods, you can pause a thread's execution for a specified amount of time. Handling InterruptedException is crucial when using the sleep method to ensure that your program can gracefully handle interruptions.

Happy coding!

Comments