Clase Java.lang.Thread en Java

Enhebre una línea de ejecución dentro de un programa. Cada programa puede tener múltiples hilos asociados. Cada subproceso tiene una prioridad que utiliza el programador de subprocesos para determinar qué subproceso debe ejecutarse primero. Java proporciona una clase de subprocesos que tiene varias llamadas a métodos para administrar el comportamiento de los subprocesos al proporcionar constructores y métodos para realizar operaciones en los subprocesos. 

Formas de crear hilos.

  1. Creando una clase propia que se extiende a la clase Thread principal
  2. Implementación de la interfaz Runnable.

A continuación se encuentran los pseudocódigos a los que se puede hacer referencia para obtener una mejor imagen sobre el subproceso de ahora en adelante Clase de subproceso.

Ilustración 1:

Java

// Way 1
// Creating thread By Extending To Thread class
 
class MyThread extends Thread {
 
    // Method 1
    // Run() method for our thread
    public void run()
    {
 
        // Print statement
        System.out.println(
            "Thread is running created by extending to parent Thread class");
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating object of our thread class inside main()
        // method
        MyThread myThread = new MyThread();
       
        // Starting the thread
        myThread.start();
    }
}
Producción

Thread is running created by extending to parent Thread class

Ilustración 2:

Java

// Way 2
// Creating thread using Runnable interface
 
class ThreadUsingInterface implements Runnable {
 
    // Method 1
    // run() method for the thread
    public void run()
    {
 
        // Print statement
        System.out.println("Thread is created using Runnable interface");
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating object of our thread class inside main()
        // method
        ThreadUsingInterface obj = new ThreadUsingInterface();
       
        // Passing the object to thread in main()
        Thread myThread = new Thread(obj);
       
        // Starting the thread
        myThread.start();
    }
}
Producción

Thread is created using Runnable interface

Clase de hilo en Java 

Un hilo es un programa que comienza con un método() que se usa con frecuencia en esta clase y que solo se conoce como el método de inicio(). Este método busca el método run() que también es un método de esta clase y comienza a ejecutar el cuerpo del método run(). aquí vigile el método sleep() que se discutirá más adelante.

Nota: cada clase que se usa como subproceso debe implementar la interfaz Runnable y anular su método de ejecución.

Sintaxis: 

public class Thread extends Object implements Runnable

Los constructores de esta clase son los siguientes:

Constructor  Acción realizada 
Hilo() Asigna un nuevo objeto Thread.
Subproceso (objetivo ejecutable) Asigna un nuevo objeto Thread.
Subproceso (objetivo ejecutable, nombre de string) Asigna un nuevo objeto Thread.
Subproceso (nombre de la string) Asigna un nuevo objeto Thread.
Subproceso (grupo ThreadGroup, objetivo ejecutable) Asigna un nuevo objeto Thread.
Subproceso (grupo ThreadGroup, objetivo ejecutable, nombre de string) Asigna un nuevo objeto de subproceso para que tenga como destino su objeto de ejecución, tenga el nombre especificado como su nombre y pertenezca al grupo de subprocesos al que hace referencia un grupo.
Subproceso (grupo ThreadGroup, objetivo ejecutable, nombre de string, tamaño de pila largo) Asigna un nuevo objeto Thread para que tenga como destino su objeto de ejecución, tenga el nombre especificado como su nombre, pertenezca al grupo de subprocesos al que hace referencia el grupo y tenga el tamaño de pila especificado.
Subproceso (grupo ThreadGroup, nombre de string) Asigna un nuevo objeto Thread.

Métodos de la clase Thread:

Ahora analicemos todos los métodos de esta clase que se ilustran a continuación:

Métodos Acción realizada 
cuentaActiva() Devuelve una estimación del número de subprocesos activos en el grupo de subprocesos del subproceso actual y sus subgrupos.
comprobarAcceso() Determina si el subproceso que se está ejecutando actualmente tiene permiso para modificar este subproceso
clon() Lanza CloneNotSupportedException como un subproceso que no se puede clonar de manera significativa
subproceso actual() Devuelve una referencia al objeto de subproceso que se está ejecutando actualmente.
volcarPila() Imprime un seguimiento de pila del subproceso actual en el flujo de error estándar
enumerar (hilo [] tarray) Copia en la array especificada cada subproceso activo en el grupo de subprocesos del subproceso actual y sus subgrupos
getAllStackTraces() Devuelve un mapa de seguimientos de pila para todos los subprocesos en vivo
getContextClassLoader() Devuelve el contexto ClassLoader para este subproceso
getDefaultUncaughtExceptionHandler() Devuelve el controlador predeterminado que se invoca cuando un subproceso termina abruptamente debido a una excepción no detectada
obtenerId() Devuelve el identificador de este Thread
obtenerNombre() Devuelve el nombre de este hilo
obtenerPrioridad() Devuelve la prioridad de este hilo
obtenerStackTrace() Devuelve una array de elementos de seguimiento de pila que representan el volcado de pila de este subproceso
obtenerEstado() Devuelve el estado de este hilo.
getThreadGroup() Devuelve el grupo de subprocesos al que pertenece este subproceso
getUncaughtExceptionHandler() Devuelve el controlador invocado cuando este subproceso termina abruptamente debido a una excepción no detectada
holdLock(Objeto obj) Devuelve verdadero si y solo si el subproceso actual mantiene el bloqueo del monitor en el objeto especificado
interrumpir() Interrumpe este hilo
interrumpido() Comprueba si el hilo actual ha sido interrumpido
está vivo() Comprueba si este hilo está vivo.
esDaemon() Comprueba si este hilo es un hilo daemon
está interrumpido() Comprueba si este hilo ha sido interrumpido
unirse() Espera a que este hilo muera
unirse (milis largo) Espera como máximo milimilisegundos para que este hilo muera
correr() Si este subproceso se construyó usando un objeto de ejecución Runnable separado, entonces se llama al método de ejecución de ese objeto Runnable; de lo contrario, este método no hace nada y devuelve
setContextClassLoader(ClassLoader cl) Establece el contexto ClassLoader para este subproceso
setDaemon(booleano activado) Marca este subproceso como un subproceso daemon o un subproceso de usuario
setDefaultUncaughtExceptionHandler( Thread.UncaughtExceptionHandler eh) Establezca el controlador predeterminado que se invoca cuando un subproceso finaliza abruptamente debido a una excepción no detectada y no se ha definido ningún otro controlador para ese subproceso.
setName(nombre de la string) Cambia el nombre de este subproceso para que sea igual al nombre del argumento.
setUncaughtExceptionHandler( Thread.UncaughtExceptionHandler eh) Establecer el controlador invocado cuando este subproceso termina abruptamente debido a una excepción no detectada
setPriority(int newPriority) Cambia la prioridad de este hilo.
dormir (milis largo) Hace que el subproceso que se está ejecutando actualmente entre en suspensión (deje de ejecutarse temporalmente) durante el número especificado de milisegundos, sujeto a la precisión y exactitud de los temporizadores y programadores del sistema.
comienzo() Hace que este subproceso comience a ejecutarse; la máquina virtual de Java llama al método de ejecución de este subproceso
Enstringr() Devuelve una representación de string de este hilo, incluido el nombre del hilo, la prioridad y el grupo de hilos.
rendir() Una pista para el planificador de que el subproceso actual está dispuesto a ceder su uso actual de un procesador

También recuerde que hay ciertos métodos heredados de la clase Java. lang.Object que son los siguientes: 

  1. método igual() 
  2. Método finalizar() 
  3. método getClass() 
  4. Método hashCode() 
  5. método de notificación() 
  6. Método de notificación a todos() 
  7. Método toString()
  8. método esperar()

Ejemplo: programa Java para demostrar el uso de la clase Thread 

Java

// Java program Demonstrating Methods of Thread class
 
// Importing package
package generic;
 
// Class 1
// Helper class implementing Runnable interface
class Helper implements Runnable {
 
    //
    public void run() {
 
        // Try block to check for exceptions
        try {
 
            // Print statement
            System.out.println("thread2 going to sleep for 5000");
 
            // Making thread sleep for 0.5 seconds
            Thread.sleep(5000);
 
        }
 
        // Catch block to handle exception
        catch (InterruptedException e) {
 
            // Print statement
            System.out.println("Thread2 interrupted");
        }
    }
}
 
// Class 2
// Helper class extending Runnable interface
public class Test implements Runnable {
 
    // Method 1
    // run() method of this class
    public void run() {
 
        // Thread run() method
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args) {
 
        // Making objects of class 1 and 2 in main() method
        Test obj = new Test();
        Helper obj2 = new Helper();
 
        // Creating 2 threads in main() method
        Thread thread1 = new Thread(obj);
        Thread thread2 = new Thread(obj2);
 
        // Moving thread to runnable states
        thread1.start();
        thread2.start();
 
        // Loading thread 1 in class 1
        ClassLoader loader = thread1.getContextClassLoader();
 
        // Creating 3rd thread in main() method
        Thread thread3 = new Thread(new Helper());
 
        // Getting number of active threads
        System.out.println(Thread.activeCount());
        thread1.checkAccess();
 
        // Fetching an instance of this thread
        Thread t = Thread.currentThread();
 
        // Print and display commands
        System.out.println(t.getName());
 
        System.out.println("Thread1 name: " + thread1.getName());
        System.out.println("Thread1 ID: " + thread1.getId());
 
        // Fetching the priority and state of thread1
        System.out.println("Priority of thread1 = " + thread1.getPriority());
 
        // Getting the state of thread 1 using getState() method
        // and printing the same
        System.out.println(thread1.getState());
 
        thread2 = new Thread(obj2);
        thread2.start();
        thread2.interrupt();
        System.out.println("Is thread2 interrupted? " + thread2.interrupted() );
        System.out.println("Is thread2 alive? " + thread2.isAlive());
 
        thread1 = new Thread(obj);
        thread1.setDaemon(true);
        System.out.println("Is thread1 a daemon thread? " + thread1.isDaemon());
        System.out.println("Is thread1 interrupted? " + thread1.isInterrupted());
 
        // Waiting for thread2 to complete its execution
        System.out.println("thread1 waiting for thread2 to join");
 
        try {
            thread2.join();
        }
 
        catch (InterruptedException e) {
 
            // Display the exception along with line number
            // using printStackTrace() method
            e.printStackTrace();
        }
 
        // Now setting the name of thread1
        thread1.setName("child thread xyz");
 
        // Print and display command
        System.out.println("New name set for thread 1" + thread1.getName());
 
        // Setting the priority of thread1
        thread1.setPriority(5);
 
        thread2.yield();
 
        // Fetching the string representation of thread1
        System.out.println(thread1.toString());
 
        // Getting list of active thread in current thread's group
        Thread[] tarray = new Thread[3];
 
        Thread.enumerate(tarray);
 
        // Display commands
        System.out.println("List of active threads:");
        System.out.printf("[");
 
        // Looking out using for each loop
        for (Thread thread : tarray) {
 
            System.out.println(thread);
        }
 
        // Display commands
        System.out.printf("]\n");
 
        System.out.println(Thread.getAllStackTraces());
 
        ClassLoader classLoader = thread1.getContextClassLoader();
        System.out.println(classLoader.toString());
        System.out.println(thread1.getDefaultUncaughtExceptionHandler());
 
        thread2.setUncaughtExceptionHandler(thread1.getDefaultUncaughtExceptionHandler());
        thread1.setContextClassLoader(thread2.getContextClassLoader());
        thread1.setDefaultUncaughtExceptionHandler(thread2.getUncaughtExceptionHandler());
 
        thread1 = new Thread(obj);
        StackTraceElement[] trace = thread1.getStackTrace();
 
        System.out.println("Printing stack trace elements for thread1:");
 
        for (StackTraceElement e : trace) {
            System.out.println(e);
        }
 
        ThreadGroup grp = thread1.getThreadGroup();
        System.out.println("ThreadGroup to which thread1 belongs " + grp.toString());
        System.out.println(thread1.getUncaughtExceptionHandler());
        System.out.println("Does thread1 holds Lock? " + thread1.holdsLock(obj2));
 
 
        Thread.dumpStack();
 
    }
}

Producción: 

3
main
Thread1 name: Thread-0
Thread1 ID: 10
Priority of thread1 = 5
RUNNABLE
Is thread2 interrupted? false
Is thread2 alive? true
Is thread1 a daemon thread? true
Is thread1 interrupted? false
thread1 waiting for thread2 to join
thread2 going to sleep for 5000 ms
thread2 going to sleep for 5000 ms
Thread2 interrupted
New name set for thread 1child thread xyz
Thread[child thread xyz, 5, main]
List of active threads:
[Thread[main, 5, main]
Thread[Thread-1, 5, main]
null
]
{Thread[Signal Dispatcher, 9, system]=[Ljava.lang.StackTraceElement;@33909752, 
Thread[Thread-1, 5, main]=[Ljava.lang.StackTraceElement;@55f96302, 
Thread[main, 5, main]=[Ljava.lang.StackTraceElement;@3d4eac69, 
Thread[Attach Listener, 5, system]=[Ljava.lang.StackTraceElement;@42a57993, 
Thread[Finalizer, 8, system]=[Ljava.lang.StackTraceElement;@75b84c92, 
Thread[Reference Handler, 10, system]=[Ljava.lang.StackTraceElement;@6bc7c054}
sun.misc.Launcher$AppClassLoader@73d16e93
null
Printing stack trace elements for thread1:
ThreadGroup to which thread1 belongs java.lang.ThreadGroup[name=main, maxpri=10]
java.lang.ThreadGroup[name=main, maxpri=10]
Does thread1 holds Lock? false
java.lang.Exception: Stack trace
    at java.lang.Thread.dumpStack(Unknown Source)
    at generic.Test.main(Test.java:111) 

Este artículo es una contribución de Mayank Kumar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *