Hay dos formas de establecer hilos en Java, a saber, heredar la clase de subprocesos e implementar la interfaz ejecutable.
Heredar hilo
public class myThread extiende el hilo {public mythread (nombre de cadena) {super (nombre); } int i; public void run () {for (i = 0; i <5; i ++) {system.out.println (getName ()+"-"+i); }} public static void main (string [] agrs) {new MyThread ("Thread1"). Start (); nuevo MyThread ("Thread2"). Start (); }} /*Tema 1-0Tread 1-1-Thread 1-2Thread 1-3Thread 1-4Thread 2-0Thread 2-1Thread 2-2-2-2-3Thread 2-4* /Como se mencionó anteriormente, los objetos de hilo en Java deben crearse en forma de clase, y el método Run () de la clase base debe anularse en esta clase. Este método es en realidad el cuerpo de ejecución del hilo. Llamar al método de inicio de esta instancia de clase llama implícitamente el método Ejecutar.
No es difícil ver que, dado que Mythread era nuevo dos veces, los ejemplos de las dos veces son diferentes, es decir, cada una tiene sus propias variables I, que son independientes entre sí.
Interfaz ejecutable
clase pública implementos myrunnable runnable {int i; public void run () {for (i = 0; i <50; i ++) {system.out.println (thread.currentThread (). getName ()+"-"+i); // this.getName () no puede usarse directamente}} public static void main (string [] Agrs) {myrunnable myrun = new Myrunnable (); nuevo hilo (Myrun, "Thread1"). Start (); nuevo hilo (Myrun, "Thread2"). Start (); }} /*Hilo 1-0Thread 1-1-Thread 2-0Thread 2-3Thread 2-4Thread 2-5Thread 2-6Thread 2-7Thread 2-8th Hild 2-9th Hild 2-10th Hild 2-11th Hild 2-12th Hild 2-13Thread 2-14th Hild 2-15th Hild 2-22th thread 2-23th thread 2-24th thread 1-17th thread 2--25 threads 1--26 threads 2--27 threads 1--28 threads 1--30 threads 2--29 threads 1--31 threads 2--32 threads 2--34 threads 2--35 threads 2--36 threads 2--37 threads 1--33 threads 2--38 threads 1--39 threads 1--41 threads 2--40 Hilos 1--42 Hilos 1--44 Hilos 1--45 Hilos 2--43 Hilos 1--46 Portes 2--47 Hilos 2--49 Hilos 1--48*/Se puede ver que, dado que este método es cargar un objeto en la clase de subprocesos como objetivo, incluso si hay muchos objetos de subprocesos en nuevos, siempre que el objetivo sea el mismo objeto de referencia, se llama el método Ejecutar del objeto y todos los subprocesos comparten los recursos del objeto de destino. Por lo tanto, verá que la salida de hilo 1 y hilo 2 un total de 51 veces, y los dos subprocesos han completado la salida de I de 0 a 49, y no salen 5 veces respectivamente como arriba. En cuanto a por qué se emiten 51, los dos subprocesos entran en el estado listo casi al mismo tiempo (el método de inicio solo permite que el subproceso ingrese al estado listo), no es difícil encontrar que cuando sea igual a 0, subproceso 1 y subproceso 2 se encuentren en el estado en funcionamiento al mismo tiempo, lo que resulta en un fenomenón de concurrencia y la salida de i = 0 juntos. Después de eso, la CPU cambia constantemente las roscas, de modo que solo se emite un hilo al mismo tiempo.
Estado de hilo
Los hilos se dividen en 4 estados
Estado listo: llame al método de inicio e ingrese el estado listo.
Estado en ejecución: JVM programará el hilo en el estado listo y se convertirá en el estado en ejecución.
Estado de bloqueo: si algunos métodos de sincronización no devuelven resultados, se produce un estado de bloqueo, o Sleep y Yeild.
Estado de la muerte: el cuerpo del método se ejecuta o un hilo se ve obligado a detenerse.
Operaciones básicas de hilos
unir () hilo de fusión: después de que el hilo actual llama al método de unión de un hilo, esperará a que el hilo complete la ejecución antes de que el hilo continúe.
Dormir (largos milisegundos) Duerme del hilo: bloquea el hilo actual y continuará solo cuando el tiempo de bloqueo esté arriba. Al bloquear nuevamente, la propiedad de la CPU se entregará a otros hilos, por lo que el sueño (1) a menudo se usa para cambiar los hilos.
** Concesiones de hilo de rendimiento (): ** Yeild es similar al sueño, pero solo se concesiones a otros hilos en un nivel más alto o al mismo nivel. Si ningún otro hilo es inferior a su nivel, el hilo se ejecutará nuevamente.
Hilo de fondo
Después de que el sistema operativo ejecute un programa, habrá un proceso y un proceso tiene al menos un hilo (hilo principal). El hilo principal no tiene muchas características especiales que otros hilos, solo porque es el hilo más temprano que se ejecutará, se crearán otros hilos en el hilo principal. Si no se especifica, el hilo de primer plano (incluido el hilo principal) se crea de forma predeterminada. Si se llama a SetDaemon (True), el hilo se establece explícitamente como un hilo de fondo. El hilo de fondo es un hilo de demonio. Como puede ver del nombre, su función principal es proporcionar funciones de guardia y servicio para otros hilos. Cuando terminen todos los hilos de primer plano, el hilo de fondo se verá obligado a terminar porque no tiene sentido existir en este momento.
Hilo de primer plano
Public Class ForeandBackThread extiende el hilo {public ForeandBackThread (nombre de cadena) {super (nombre); } public void run () {int i; para (i = 0; i <9999; i ++) {system.out.println (this.getName ()+"-"+i); }} public static void main (string [] args) {foreandBackThread th = new ForeandBackThread ("Thread A"); //th.setdaemon(true); th.start (); int j; for (j = 0; j <3; j ++) {System.out.println (Thread.CurrentThread (). GetName ()+"-"+J); }}}El hilo de la salida de salida del programa es de 0 a 9998; Significa que el hilo principal no es especial, y su final no afectará la operación de otros hilos de primer plano.
Hilo de fondo
Public Class ForeandBackThread extiende el hilo {public ForeandBackThread (nombre de cadena) {super (nombre); } public void run () {int i; para (i = 0; i <9999; i ++) {system.out.println (this.getName ()+"-"+i); }} public static void main (string [] args) {foreandBackThread th = new ForeandBackThread ("Thread A"); th.setdaemon (verdadero); th.start (); int j; for (j = 0; j <3; j ++) {System.out.println (Thread.CurrentThread (). GetName ()+"-"+J); }}}El programa no puede emitir 0-9998 en su totalidad y sale, lo que indica que después de que termina el hilo principal del primer plano, JVM obliga al hilo de fondo a finalizar.
Resumir
Lo anterior se trata del análisis de ejemplos básicos de hilos Java en este artículo, 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. ¡Gracias amigos por su apoyo para este sitio!