Seis estados de conmutación y las hebras Java

Estado hebra Java se divide en seis tipos:

1. Inicial (NUEVO): crear un nuevo objeto hilo, pero no ha sido el método start () llamada.
2. Ejecutar (RUNNABLE): hilo de Java estará lista (lista) y en funcionamiento (en ejecución) dos estados refieren generalmente como "correr".
Después se crea el objeto hilo, otros hilos (tales como hilo principal) llama al método start () del objeto. El estado de rosca se encuentra threads ejecutables en la piscina, esperando para ser seleccionada la programación de subprocesos, la adquisición del derecho a utilizar la CPU, esta vez en un estado preparado (listo). estado Lista después de obtener la rebanada de rosca tiempo de CPU se convierte en el estado de funcionamiento (en ejecución).
3. bloqueado (bloqueada): significa que el hilo se bloquea en la cerradura.
4. Esperar (ESPERA): hilos Este estado se introduce tienen que esperar a que otros hilos para hacer alguna acción específica (notificación o interrupción).
El período de tiempo de espera (TIMED_WAITING): Este estado es diferente ESPERA, se puede volver en sí después de un tiempo especificado.

6. Terminación (terminada): el hilo ha terminado.

diagrama de estados hilo


1. estado inicial

Implementar Ejecutable y clase herencia hilo puede obtener un hilo, nueva instancia uno de cada hilo entra en el estado inicial.

2.1 Ready

  • Listo acaba de decir usted califica para funcionar, el programador no le recoger, nunca estará listo.
  • método start () del thread que llama, el hilo en el estado preparado.
  • Los extremos método sueño hilo actual (), otro hilo se unen () final, esperando la entrada del usuario es completa, un bloqueo de rosca para conseguir los objetos, estos hilos entrarán en el estado preparado.
  • hilo actual segmento de tiempo se agota, la llamada al método rendimiento hilo actual (), el subproceso actual en el estado preparado.
  • grupo de subprocesos de bloqueo conseguir la cerradura objeto, entrar en el estado listo.

2.2. Ejecución de Estado

Un planificador de hilos seleccionando una piscina de un hilo conductor en un momento en que el estado de flujo actual. Esta es también la única forma de hilo en el estado de ejecución.

3. bloqueado

estado de bloqueo se bloquea en el estado de la rosca entra la palabra clave sincronizada o método de modificación de bloque de código (adquisición de bloqueo).

4. Esperar

Hilo en este estado no se le asignará el tiempo de ejecución de la CPU, que tienen que esperar para ser reanudado de forma explícita, de lo contrario van a estar en un estado de espera indefinidamente.

5. Tiempo de espera de espera

Hilo en este estado no se asignará el tiempo de ejecución de la CPU, pero sin esperar a otros hilos que se mostrarán de forma indefinida despiertan, se activará automáticamente después de un cierto tiempo.

6. Estado de terminación

  • Cuando se completa el método de ejecución hilo () cuando se haya completado, o el hilo principal del método main (), creemos que ha puesto fin. El objeto hilo podría estar vivo, pero no tiene un solo hilo de ejecución. A la terminación de la rosca, es final.
  • inicio de la llamada termina en un hilo () método lanza una excepción java.lang.IllegalThreadStateException.

Lista de espera

  • Antes de llamar al obj de wait (), notify () método, debe ser obj cerradura, que se va a escribir en el segmento (obj) código sincronizado.
  • Y el paso de la cola de espera asociada con
  • 1. Un hilo 1 adquiere el bloqueo de objeto, está utilizando el objeto A.
  • 2. Tema 1 llama al método de objeto Una espera ().
  • 3. Hilo 1 para liberar el objeto de bloqueo A, y entrar inmediatamente la cola de espera.
  • 4. La piscina interior de la cerradura Una competición objeto de bloqueo para el objeto.
  • se obtiene 5. Un objeto de bloqueo de rosca 5, el proceso pasa bloque sincronizado, mediante el objeto A.
  • 6. 5 subproceso llama el método objeto A notifyAll () se despierta todos los hilos, todas las discusiones a entrar en la cola de sincronización. Si un subproceso llama el objeto A 5 Método de notificar (), y luego despertar un hilo, no sé que va a despertar, despertar ese hilo en la cola síncrona.
  • método 7.notifyAll () donde sincronizado final, 5 hilo libera el objeto de bloqueo A.
  • 8. La cola de bloqueo objeto de sincronización hilo competencia, pero cuando se agarra el hilo 1 no sé.

estado de la cola de sincronización

  • Cuando el método de sincronización de subprocesos actual del objeto A quiere llamar, encontrado el objeto de bloqueo A está ocupada por otro hilo, a continuación, el hilo de corriente en la cola de síncrono. En resumen, la cola de sincronización que puso todos quieren competir por el hilo de bloqueo de objeto.
  • Cuando un hilo es un despertador otro hilo 2, un hilo en la cola sincrónica, para competir por el bloqueo del objeto.
  • cola Synchronous sólo es conceptual en entorno síncrono, un objeto que corresponde a una cola síncrona.

Comparación de varios métodos

  • Thread.sleep (Millis largos), el hilo actual debe llamar a este método, el hilo actual al estado de TIMED_WAITING, pero no liberar el bloqueo de objeto, despertador automático después de Millis hilo en el estado preparado. Papel: La mejor manera de dar la oportunidad de realizar otros hilos.
  • Thread.yield (), el hilo actual debe llamar a este método, el hilo actual a renunciar intervalo de tiempo de CPU adquirida, pero no libera los recursos de bloqueo mediante la ejecución de un estado a estado preparado, optar por dejar que la hebra de OS de nuevo. Papel: dejar que la misma ejecución prioridad de subprocesos por turnos, pero no garantiza que se turnan para llevar a cabo. No podemos garantizar que el rendimiento real () para lograr el propósito de concesiones, porque hilos concesiones también pueden seleccionarse de nuevo hilo planificador. Thread.yield () no causa la obstrucción. Este sueño método () es similar, pero no especificada por el usuario para hacer una pausa larga.
  • t.join () / t.join (millis largos), pasar la llamada al método actual unirse a otro hilo t, el hilo de corriente en el estado de espera / TIMED_WAITING no liberará el hilo actual ya mantiene el bloqueo objeto. T hilo terminado o millis tiempo para, el subproceso actual en el estado preparado.
  • obj.wait (), el subproceso actual llama al método wait () del objeto, las emisiones actuales de la rosca de bloqueo objeto, en la cola de espera. Rely notificar () / notify () Wake o de espera (tiempo de espera) el tiempo de espera para despertar automáticamente.
  • obj.notify () despierta un solo hilo de espera en el monitor de este objeto, la elección es arbitraria. notifyAll () se despierta todos los hilos esperando en el monitor de este objeto.
Publicados 964 artículos originales · ganado elogios 11 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/xiaoyaGrace/article/details/105400462
Recomendado
Clasificación