Red de conocimiento informático - Material del sitio web - Cuáles son los métodos para implementar subprocesos múltiples en Java y cómo usarlos con urgencia ~~~~~~~~~~~~~~~~~~

Cuáles son los métodos para implementar subprocesos múltiples en Java y cómo usarlos con urgencia ~~~~~~~~~~~~~~~~~~

1. Comprender Thread y Runnable

Hay dos formas de implementar subprocesos múltiples en Java: heredar la clase Thread o implementar la interfaz Runnable: Runnable es una interfaz y se recomienda utilizar la interfaz para generar subprocesos, porque la interfaz puede lograr herencia múltiple y Runnable solo tiene un método de ejecución, que es muy adecuado para la herencia. Cuando use Thread, simplemente herede de Thread y cree una nueva instancia, luego llame al método start() para iniciar el hilo.

Thread Test = new Thread();

Test.start();

Cuando se utiliza Runnable, es necesario crear una nueva instancia que implemente Runnable. y luego Iniciar el hilo.

La prueba implementa Runnable

Prueba t = nueva Prueba();

Prueba de subproceso = nueva Subproceso(t); .start();

Resumen: Thread y Runnable son dos formas de implementar subprocesos múltiples de Java. Runnable es una interfaz y thread es una clase. Se recomienda utilizar runable para implementar subprocesos múltiples de Java. En cualquier caso, al final, todos requieren thread.start() para que el hilo esté en un estado ejecutable.

2. Comprender el inicio y el funcionamiento de los subprocesos

1) Inicio:

Después de que el método de inicio inicia el subproceso, realmente se realiza la operación de subprocesos múltiples. En este momento, no es necesario Espere a que el método de ejecución complete la ejecución del código de texto y continúe ejecutando directamente el siguiente código. Cuando se inicia un subproceso llamando al método start () en la clase Thread, el subproceso está en estado ejecutable y no se está ejecutando. Una vez que se obtiene el intervalo de tiempo de la SPU, el método run () comenzará a ejecutarse. () en este método Se llama cuerpo del hilo, que contiene el contenido que ejecutará el hilo. Una vez completado el método Ejecutar, el hilo termina inmediatamente.

2) ejecutar:

El método run() es solo un método ordinario en la clase. Si llamas al método Run directamente, el programa todavía solo tiene un hilo, el principal. hilo, y la ruta de ejecución del programa todavía es Solo hay uno, todavía debe ejecutarse en orden, o aún tiene que esperar a que se ejecute el cuerpo principal del método de ejecución antes de continuar ejecutando el siguiente código, por lo que no se logra el propósito de escribir hilos. Esto anula el propósito de escribir hilos.

Resumen: Llamar al método de inicio puede iniciar un subproceso, mientras que el método de ejecución es solo una llamada al método de subproceso normal o se ejecuta en el subproceso principal.

3. Descripción del estado del hilo

Desde una perspectiva amplia, el estado de un hilo se puede resumir como: estado inicial, estado ejecutable, estado no ejecutable y estado muerto, y puede también se subdivide en siete estados como se muestra en la figura anterior, que se describe a continuación:

1) Hay dos formas de implementar subprocesos, una es heredar la clase Thread y la otra es implementar la interfaz Runnable, pero los subprocesos se pueden crear cuando creamos una nueva clase de subproceso.

2) Cuando el objeto llama al método start(), ingresa al estado ejecutable

3) Después de ingresar al estado ejecutable, cuando el sistema operativo selecciona el objeto; obtiene el intervalo de tiempo de la CPU y entra en el estado de ejecución

4) Después de entrar en el estado de ejecución, entra en el estado ejecutable

5) Después de entrar en el estado ejecutable; el estado ejecutable;

6) Después de ingresar al estado ejecutable, ingrese al estado ejecutable.

Habrá más situaciones después de eso, que incluyen aproximadamente las siguientes:

-Cuando finalice el método run() o main(), el hilo entrará en el estado terminado;

-; Cuando el hilo Al llamar a su propio método sleep () o al método join () de otros hilos, entrará en el estado de bloqueo (este estado no detiene el hilo actual ni libera los recursos ocupados). Cuando finaliza sleep() o join(), el hilo entrará en el estado ejecutable y continuará esperando a que el sistema operativo asigne un intervalo de tiempo;

-Cuando el hilo acaba de entrar en el estado ejecutable ( tenga en cuenta que aún no se está ejecutando), y cuando se descubre que el recurso a llamar está bloqueado (sincronizar, bloquear), ingresará inmediatamente al estado del grupo de bloqueo y esperará para obtener la marca de bloqueo (que está en el grupo de bloqueo). en este momento). Es posible que ya haya otros subprocesos esperando adquirir la etiqueta de bloqueo. Están en el estado de cola y todos son por orden de llegada). Una vez que el subproceso adquiere la etiqueta de bloqueo, entrará en el estado ejecutable y esperará a que el sistema operativo lo haga. asigne intervalos de tiempo de CPU;

Cuando un subproceso llama al método de espera (), ingresará a la cola de espera (ingresar a este estado liberará todos los recursos ocupados, que es diferente del estado de bloqueo después de ingresar a este). estado, no entrará automáticamente en la cola de espera. En este estado, no se despertará automáticamente. Debe depender de otros subprocesos para llamar al método notify() o notifyAll() para activarlo (ya que notify() solo despierta un subproceso, pero no podemos determinar qué subproceso lo despierta específicamente). , tal vez El hilo que necesitamos despertar no se puede despertar, por lo que en el uso real, el método notifyAll () generalmente se usa para despertar todos los hilos. El hilo despertado ingresará al grupo de bloqueo y esperará hasta obtener la marca de bloqueo.

-Cuando un subproceso llama al método de detención, el subproceso puede entrar en estado muerto. Sin embargo, debido a que el método de detención no es seguro, se desaconseja su uso. El subproceso se puede detener cambiando las condiciones en la ejecución. método.