¿Cómo monitorear el estado de un hilo en Java?

El lenguaje Java admite la sincronización de subprocesos mediante el uso de monitores. Un monitor está asociado con un elemento de datos específico y funciona como un bloqueo en esos datos. Cuando un subproceso retiene el monitor para algún elemento de datos, otros subprocesos se bloquean y no pueden inspeccionar ni modificar los datos. Para monitorear el estado de un subproceso, Java tiene un método predefinido currentThread.getName() que se amplía con Thread Class . El método getName() de la clase java.lang.reflect.Method se usa para obtener el nombre de la entidad, como una string. , esa entidad puede ser clase, interfaz, array, enumeración, método, etc. del objeto de clase. El método getName() de j ava.lang.reflect. La clase de método es útil para obtener el nombre de los métodos, como una string. Para obtener el nombre de todos los métodos de una clase, obtenga todos los métodos de ese objeto de clase. Luego llame a getName() en esos objetos de método.

Sintaxis:

public String getName()

Valor devuelto: Devuelve el nombre del método, como String.

Ejemplo:

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 this class
    MyThread() {}
 
    // Methods of this 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 status 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 flag 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);
    }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por ravikdubey360 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *