La clase de hilo de Java también es una clase de objetos, y sus instancias se heredan de java.lang.thread o su subclase. Puede crear un hilo en Java de la siguiente manera. Ejecutar el hilo puede llamar al método Start () del hilo:
Tread Thread = New Thread ();
Thread.Start ();
En el ejemplo anterior, no escribimos código de ejecución para el hilo, por lo que el hilo termina después de llamar al método.
Hay dos formas de escribir código ejecutado cuando se ejecuta un subproceso: uno es crear una instancia de la subclase de subproceso y anular el método Ejecutar, y el segundo es implementar la interfaz ejecutable al crear la clase. A continuación, explicaremos estos dos métodos en detalle:
Crear una subclase de hilo
Cree una instancia de la subclase de hilo y anule el método Ejecutar. El método Ejecutar se ejecutará después de llamar al método Start (). El ejemplo de la subclase de hilo anterior se puede crear y ejecutar de la siguiente manera:
Public Class MyThread extiende el hilo {public void run () {System.out.println ("MyThread Running"); }} Mythread myThread = new MyThread (); mytread.start ();Una vez que se inicia el hilo, el método de inicio volverá inmediatamente y no esperará hasta que se ejecute el método de ejecución antes de regresar. Es como si el método de ejecución se ejecute en otra CPU. Cuando se ejecute el método Ejecutar, se imprimirá la ejecución de mythread de cadena.
También puede crear una subclase anónima de hilo de la siguiente manera:
Thread Thread = new Thread () {public void run () {System.out.println ("hilo en ejecución"); }}; thread.start ();Cuando se ejecuta el método de ejecución del nuevo subproceso, la computadora imprimirá la cadena "hilo en ejecución".
Implementación de la interfaz ejecutable
La segunda forma de escribir el código de ejecución de subprocesos es crear una nueva instancia de la clase que implementa la interfaz java.lang.runnable, y los métodos en la instancia pueden llamarse por el hilo. El siguiente es un ejemplo:
Public Class Myrunnable Implements Runnable {public void run () {System.out.println ("MyRunnable Running"); }}Para que los hilos ejecuten el método run (), es necesario pasar el objeto de instancia de Myrunnable en el constructor de la clase de hilo. Los ejemplos son los siguientes:
Hilo de hilo = nuevo hilo (new Myrunnable ());
Thread.Start ();
Cuando se ejecuta el hilo, llamará al método Ejecutar que implementa la interfaz ejecutable. "Myrunnable Running" se imprimirá en el ejemplo anterior.
Del mismo modo, puede crear una clase anónima que implementa la interfaz ejecutable, como se muestra a continuación:
Runnable myrunnable = new runnable () {public void run () {system.out.println ("runnable running"); }} Thread Thread = new Thread (myRunnable); thread.start ();¿Crear una subclase o implementar una interfaz ejecutable?
No hay una respuesta definitiva a cuál de estos dos métodos es mejor y pueden cumplir con los requisitos. En mi opinión personal, prefiero implementar el método de interfaz ejecutable. Debido a que el grupo de subprocesos puede administrar de manera efectiva los subprocesos que implementan la interfaz ejecutable, si el grupo de subprocesos está lleno, los nuevos subprocesos harán cola para la ejecución hasta que el grupo de subprocesos esté inactivo. Y si el hilo se implementa implementando la subclase de hilo, esto será un poco más complicado.
A veces necesitamos integrar las dos formas de implementar la interfaz ejecutable y la subclase de hilos al mismo tiempo. Por ejemplo, una instancia que implementa una subclase de subprocesos puede ejecutar múltiples hilos que implementan la interfaz ejecutable. Una aplicación típica es el grupo de subprocesos.
Error común: llamar al método run () en lugar del método start ()
Un error común cometido al crear y ejecutar un hilo es llamar al método run () del hilo en lugar del método start (), como se muestra a continuación:
Hilo newThread = new Thread (MyRunnable ());
newthread.run (); // debe ser inicio ();
Al principio no sientes nada malo, porque el método run () se llama de hecho como desees. Sin embargo, de hecho, el método run () no es ejecutado por el nuevo hilo que acaba de crear, sino que es ejecutado por el hilo actual que creó el nuevo hilo. Es decir, es ejecutado por el hilo que ejecuta las dos líneas de código anteriores. Para hacer que el nuevo subproceso creado ejecute el método run (), se debe llamar al método de inicio del nuevo hilo.
Nombre de hilo
Al crear un hilo, puede darle un nombre al hilo. Nos ayuda a distinguir diferentes hilos. Por ejemplo: si se escriben múltiples hilos en System.out, podemos averiguar fácilmente qué hilo está saliendo a través del nombre del subproceso. Los ejemplos son los siguientes:
Myrunnable runnable = new MyRunnable (); Thread Thread = New Thread (Runnable, "New Thread"); Thread.Start (); System.out.println (Thread.getName ());
Cabe señalar que debido a que Myrunnable no es una subclase del hilo, la clase Myrunnable no tiene un método getName (). Puede obtener una referencia al hilo actual de las siguientes maneras:
Thread.CurrentThread ();
String ThreadName = Thread.CurrentThread (). GetName ();
Código de hilo de ejemplo:
Aquí hay un pequeño ejemplo. Primero, emite el nombre de subproceso del método Main (). Este hilo está asignado por el JVM. Luego abra 10 hilos y nombre los 1 ~ 10. Cada hilo sale después de emitir su propio nombre.
public class ThreadExample {public static void main (string [] args) {System.out.println (Thread.CurrentThread (). getName ()); for (int i = 0; i <10; i ++) {new Thread ("" + i) {public void run () {System.out.println ("Thread:" + getName () + "Running"); } }.comenzar(); }}}Cabe señalar que aunque se ordena el orden de los hilos iniciales, no se ordena el orden de ejecución. Es decir, el subproceso 1 no es necesariamente el primer hilo para emitir su nombre a la consola. Esto se debe a que los hilos se ejecutan en paralelo en lugar de secuencialmente. JVM y el sistema operativo determinan la orden de ejecución de los subprocesos, y la orden de inicio de ella no es necesariamente la misma que la de los hilos.
Lo anterior es una compilación de la información creada por Java Threads. Continuaremos agregando información relevante en el futuro. ¡Gracias por su apoyo para este sitio web!