Skip to content
Related Articles

Related Articles

Improve Article
How to Monitor a Thread’s Status in Java?
  • Last Updated : 28 Apr, 2021

The Java language support thread synchronization through the use of monitors. A monitor is associated with a specific data item and functions as a lock on that data. When a thread holds the monitor for some data item, other threads are locked out and cannot inspect or modify the data. In order to monitor a thread’s status Java have predefined currentThread.getName() method that is extended by Thread Class.The getName() method of java.lang.reflect.Method class is used to get the name of the entity, as a String, that entity can be class, interface, array, enum, method, etc. of the class object. The getName() method of java.lang.reflect. Method class is helpful to get the name of methods, as a String. To get name of all methods of a class, get all the methods of that class object. Then call getName() on those method objects.

Syntax:

public String getName()

Return Value: It returns the name of the method, as String.

Example:

Java




// Java Program to Monitor a Thread's Status
  
// Class 1
// Helper class
class MyThread extends Thread {
  
    // Initially initializing states using boolean methods
    boolean waiting = true;
    boolean ready = false;
  
    // Constructor of thid class
    MyThread() {}
  
    // Methods ofthis class are as follows:
  
    // Method 1
    synchronized void startWait()
    {
        try {
            while (!ready)
                wait();
        }
        catch (InterruptedException exc) {
            System.out.println("wait() interrupted");
        }
    }
  
    // Method 2
    synchronized void notice()
    {
        ready = true;
        notify();
    }
  
    // Method 3
    // To run threads when called using start()
    public void run()
    {
  
        // Getting the name of current thread
        // using currentThread() and getName() methods
        String thrdName = Thread.currentThread().getName();
  
        // Print the corresponding thread
        System.out.println(thrdName + " starting.");
  
        // While the thread is in waiting state
        while (waiting)
            System.out.println("waiting:" + waiting);
  
        // Display message
        System.out.println("waiting...");
  
        // calling the Method1
        startWait();
  
        // Try block to check for exceptions
        try {
  
            // Making thread to pause execution for a
            // certain time of 1 second using sleep() method
            Thread.sleep(1000);
        }
  
        // Catch block to handle the exceptions
        catch (Exception exc) {
  
            // Display if interrupted
            System.out.println(thrdName + " interrupted.");
        }
  
        // Else display the thread is terminated.
        System.out.println(thrdName + " terminating.");
    }
}
  
// Class 2
// Main class
public class GFG {
  
    // Method 1
    // To get the thread status
    static void showThreadStatus(Thread thrd)
    {
        System.out.println(thrd.getName()
                           + "  Alive:=" + thrd.isAlive()
                           + " State:=" + thrd.getState());
    }
  
    // Method 2
    // Main driver method
    public static void main(String args[]) throws Exception
    {
  
        // Creating an object of our thread class
        // in the main() method
        MyThread thrd = new MyThread();
  
        // Setting the name for the threads
        // using setname() method
        thrd.setName("MyThread #1");
  
        // getting the staus of current thread
        showThreadStatus(thrd);
  
        // Starting the thread which automatically invokes
        // the run() method for the thread
        thrd.start();
  
        // Similarly repeating the same
        Thread.sleep(50);
        showThreadStatus(thrd);
  
        // hee notice we change the flaf=g value
        // thai is no more in waiting state now
        thrd.waiting = false;
  
        Thread.sleep(50);
        showThreadStatus(thrd);
        thrd.notice();
  
        Thread.sleep(50);
        showThreadStatus(thrd);
  
        // Till thread is alive
        while (thrd.isAlive())
  
            // Print the statement
            System.out.println("alive");
  
        // Callin the method
        showThreadStatus(thrd);
    }
}

Output:

Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.




My Personal Notes arrow_drop_up
Recommended Articles
Page :