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