He introducido brevemente el uso de Java Multi-Threading. Ya he introducido la clase de hilo y la clase ejecutable. Para comprender mejor el subproceso múltiple, este artículo realiza un análisis detallado del hilo.
comenzar()
Primero echemos un vistazo a la introducción de este método en la API:
Hace que el hilo comience a ejecutar; La máquina virtual Java llama al método de ejecución del hilo.
El resultado es que dos hilos funcionan simultáneamente; El subproceso actual (devuelto desde la llamada al método de inicio) y el otro hilo (ejecutando su método de ejecución).
Es ilegal comenzar un hilo varias veces. Especialmente cuando el hilo ha terminado de ejecutarse, no se puede reiniciar.
Utilice el método de inicio para iniciar el hilo, que realmente realiza un hilo múltiple. En este momento, no necesita esperar a que el código de cuerpo Ejecutar el código de cuerpo complete la ejecución y continúe ejecutando el siguiente código directamente. Se inicia un hilo llamando al método Start () de la clase de subprocesos. En este momento, el hilo está en un estado listo (ejecutable) y no se está ejecutando. Una vez que se obtiene el corte de tiempo de la CPU, el método run () comienza a ejecutarse. Aquí, la ejecución del método () se llama cuerpo del hilo. Contiene el contenido del hilo que se ejecutará. El método de ejecución finaliza y el hilo termina inmediatamente.
El método de inicio es un método para iniciar el hilo. Después de usarlo, Java creará un nuevo hilo para ejecutar el método en ejecución. Aquí hay una pequeña demostración:
for (int i = 0; i <3; i ++) {Thread t = new Thread (new runnable () {@Override public void run () {system.out.println (thread.currentThread (). getName ()+"inicio"); intente {thread.sslele (1000);} captura (interruptedException e) {e.printstArtStace ();};};};};};};};};};} System.out.println (Thread.CurrentThread (). GetName ()+"End"); t.Start (); } System.out.println ("It's Over"); Resultados de la ejecución:
Se acabó
Inicio de hilo-1
Hilo-0 Inicio
Hilo-2 inicio
End hilo-0
End Thread-1
Hilo-2 Fin
Dado que la lectura múltiple es aleatoria, los resultados pueden ser diferentes cada vez, que también es algo a lo que debemos prestar atención. La orden de ejecución y la orden de llamadas de los subprocesos no son consistentes.
correr()
El método Ejecutar es llamar al método Ejecutar de Runnable set por hilo y modificar la demostración anterior:
for (int i = 0; i <3; i ++) {Thread t = new Thread (new runnable () {@Override public void run () {system.out.println (thread.currentThread (). getName ()+"inicio"); intente {thread.sslele (1000);} captura (interruptedException e) {e.printstArtStace ();};};};};};};};};};} System.out.println (Thread.CurrentThread (). GetName ()+"End"); t.run (); } System.out.println ("It's Over"); Resultados de la ejecución:
comienzo principal
extremo principal
comienzo principal
extremo principal
comienzo principal
extremo principal
Se acabó
El resultado directo del método de ejecución es muy diferente del inicio. Se ejecuta en orden y no abre un nuevo hilo.
detener()
El método de parada es forzar la ejecución del hilo. No es seguro, así que no use este método. Cuando se llama a Stop, se lanzarán los recursos bloqueados, pero esta versión es inconsistente y puede causar fácilmente problemas de programa. Si desea controlar la parada del hilo, puede usar variables personalizadas para juzgar o iSinterrupted () método:
La clase Thread1 extiende el hilo {@Override public void run () {// juzga si el cuerpo del subproceso se está ejecutando mientras (! isinterrupted ()) {// haz algo}}} interrumpir()
La función de la interrupción es notificar al hilo que ha sido interrumpido, pero la ejecución de interrupción específica requiere un procesamiento personalizado del hilo, e incluso puede ignorarlo y continuar con la ejecución. La soledad específica es lanzar una Excepción InterruptedException al enhebrar la ejecución de los métodos de unión, espera y sueño.
Thread t1 = new Thread (new runnable () {@Override public void run () {system.out.println (thread.currentThread (). GetName ()+"start"); try {for (int i = 0; i <100000; i ++) {System.out.println (i+""); threin.sleep (1);}} catch (Catch (1 CATH (CAPTA (1 CATH (1 CATCH (CATCHET (CATCHET (CATCHET (CATCHETETET. System.out.println ("El hilo está interrumpido"); // Puede hacer la liberación de recursos, registro, etc. E.PrintStackTrace (); t1.start (); Hilt.sleep (100); t1.interrupt ();Resultados de la ejecución:
65666768 El hilo se interrumpe Java.lang.interruptedException: Sleep InterruptedThread-0 Fin en java.lang.thread.sleep (método nativo) en com.wk.aqi.act.test $ 1.run (test.java:23) en java.lang.thread.run (Thread.java:745)
isinterrupted ()
Para determinar si el hilo se interrumpe, después de ejecutar el método de interrupción anterior, devolverá verdadero.
SetPriority (int Newpriority) y GetPriority ()
Establezca la prioridad de los hilos y obtenga la prioridad de los hilos. Los recursos asignados por CPU se centran en hilos con prioridades más altas.
Thread t1 = new Thread (new runnable () {@Override public void run () {long t = system.currentTimemillis (); system.out.println (thread.currentThread (). GetName ()+"start"); for (int i = 0; i <1000; i ++) {thread.sleeple drease (1);} catch (interrupted E) TODO Auto Generado Bloque E.PrintStackTrace (); Thread t2 = new Thread (new runnable () {@Override public void run () {long t = system.currentTimEmillis (); system.out.println (thread.currentThread (). GetName ()+"start"); for (int i = 0; i <1000; i ++) {thread.sleeple drease (1);} catch (interrupted E) TODO Auto Generado Bloque E.PrintStackTrace (); t1.setpriority (10); t2.setpriority (1); t2.start (); t1.start ();Resultados de la ejecución:
Thread-0 StartThread-1 StartThread-0 T1 End 1357Thread-1 T2 End 1371
Cuando la prioridad es la misma, T1 y T2 se completan casi al mismo tiempo, y hay diferencias obvias cuando la prioridad es diferente.
getName ()
Es relativamente simple, obtenga el nombre del hilo.
unir () y unir (Long Millis)
La función del método Jion es esperar a que la ejecución del hilo se complete, y unirse (Long Millis) puede establecer el tiempo de espera máximo. Por ejemplo, el hilo principal debe esperar a que el hilo infantil se complete y obtener el resultado del hilo infantil antes de continuar ejecutándose. En este momento, puede usar el método de unión.
Thread t1 = new Thread (new runnable () {@Override public void run () {long t = system.currentTimEmillis (); system.out.println (thread.currentThread (). GetName ()+"inicio"); intente {horth.slele (1000);} captura (interrupciónxception e) {// todo auto-generatatated catch caping-generatated capting captura E.PrintStackTrace (); t1.start (); t1.Join (); System.out.println ("Esperando que T1 se ejecute antes de ejecutar");Resultados de la ejecución:
Thread-0 StartThread-0 T1 End 1001 Espere a que se ejecute T1 antes de ejecutar
Resumir
Lo anterior es toda la explicación detallada del código del método de implementación del hilo multiproceso Java, espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo.