Cuando se crea y comienza un hilo, tampoco ingresa al estado de ejecución tan pronto como se inicia ni siempre está en el estado de ejecución. Durante su ciclo de vida, tiene que pasar por cinco estados: "Nuevo", "Runnable", "Running", "Bloqueado" y "muerto". Después de que se crea el hilo, es imposible que ocupe la CPU y funcione de forma independiente. Necesita cambiar entre múltiples hilos, por lo que se cambia entre correr y bloquear la mayor parte del tiempo.
1. El estado del hilo
Hay varios estados diferentes de la existencia de un hilo, como sigue:
1. Nuevo estado
El nuevo estado es un estado en el que se ha creado el hilo, pero no ha comenzado a funcionar. Este estado permite que el hilo se ejecute llamando al método Start () del hilo.
2. Estado de Runnable
El estado ejecutable se puede llamar el estado de funcionamiento preparatorio o la cola. Este estado puede permitir que el hilo se ejecute llamando al método Start () del hilo.
El planificador de subprocesos determina qué roscas ejecutar y cuánto tiempo se ejecutará el hilo.
3. Estado de ejecución
Si se ejecuta un hilo, está en el estado en ejecución.
4. Estado muerto
Una vez que un hilo ingresa al estado muerto, ya no puede funcionar.
5. Estado no ejecutable
La máquina virtual Java JVM ejecuta subprocesos de acuerdo con los principios de prioridad y programación de subprocesos.
2. Sheduler de hilos
En JVM, la implementación de Hilt Scheduler generalmente se basa en las siguientes dos estrategias:
Estrategia de programación preventiva Estrategia de programación de tiempo compartido o estrategia de programación de round-robin
La implementación de un programador de hilos es independiente de la plataforma, por lo que la programación de hilos es impredecible.
3. Prioridad de hilos
El JVM asigna una prioridad a cada hilo recién creado.
Nivel 0: esta es la prioridad más baja
Nivel 5: Esta es la prioridad normal
Nivel 10: Esta es la más alta prioridad
Para guardar estos valores, la clase de subprocesos tiene tres variables correspondientes:
Un hilo heredará primero la prioridad de su hilo principal. La prioridad predeterminada de cada subproceso es el nivel 5 (prioridad normal), y la prioridad predeterminada del hilo principal es el nivel 5.
La prioridad del hilo se puede establecer a través del método setpriority (int priority).
Public Final Void setPriority (int prioridad)
Public void getpriority ();
Un subproceso definido por el usuario tiene un número de nombre de nombre de hilo predeterminado+ número de secuencia, y el número de secuencia comienza desde 0, como el primer hilo es Thread0.
El nombre del hilo se puede configurar a través del método SetName (Nombre de cadena), y el nombre del subproceso se puede obtener utilizando el método getName ().
Public final void setName (nombre de cadena)
Public final String getName ().
Ejemplo
Veamos un ejemplo a continuación:
paquete demo.ch; public class UserThread extiende el hilo {userThread () {super (); } UserThread (name de cadena) {super (nombre); } public void run () {system.out.println ("hilo comenzó en ejecución ..."); } public static void main (string [] args) {userThread Thread1 = new UserThread ("Thread1"); UserThread Thread2 = new UserThread ("Thread2"); System.out.println ("Hilo 1 nombre inicial y prioridad"); System.out.println ("Nombre:" + Thread1.getName ()); System.out.println ("Priority:" + Thread1.getPriority ()); System.out.println ("Hilo 2 Nombre inicial y prioridad"); System.out.println ("Nombre:" + Thread2.getPriority ()); System.out.println ("Priority:" + Thread2.getPriority ()); System.out.println (""); hilo1.setpriority (6); thread2.setpriority (9); System.out.println ("Hilo 1 nombre inicial y prioridad"); System.out.println ("Nombre:" + Thread1.getName ()); System.out.println ("Priority:" + Thread1.getPriority ()); System.out.println ("Hilo 2 Nombre inicial y prioridad"); System.out.println ("Nombre:" + thread2.getName ()); System.out.println ("Priority:" + Thread2.getPriority ()); System.out.println (""); Thread1.Start (); thread2.start (); para (int i = 0; i <5; i ++) System.out.println ("Método principal I Valor:"+I); }}Resultado de salida:
Hilo 1 nombre inicial y nombre de prioridad: Thread1Priority: 5Thread 2 Nombre inicial y Nombre de la prioridad: Thread2Priority: 5Thread 1 Nombre inicial y Nombre de la prioridad: Thread1Priority: 6Thread 2 Nombre inicial y Nombre de la prioridad: Thread2Priority: 9Main Método I Valor: 0 Método de Manain I Valor: 1Thread Comenzando en ejecución ... Método de Mane I Valor: 2Thread comenzó en ejecución ... Método de Manain: 3Main Método I Valor: 1Thread Comenzando en ejecución ... Método de Mane I Valor: 2Thread comenzó en ejecución ...
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!