copia de: http://gityuan.com/2016/01/03/java-thread-wait-sleep/
Análisis comparativo de los diferentes hilos relacionados que esperar Java (), notificar (), el sueño (), de interrupción () método
Descripción del método
clase thread
- sueño: el hilo se está ejecutando actualmente se suspende; (método de clase)
- Rendimiento: suspender el hilo está ejecutando actualmente y otros hilos para ejecutar; (método de clase)
- Ingreso: espera a que dicho hilo;
- interrupción: interrumpir el hilo de rosca cuando las llamadas wait (), dormir (), cuando la unión () o la operación de E / S, o va a recibir InterruptedException ClosedByInterruptException;
clase de objeto
- esperar: Pausa el hilo que se está ejecutando hasta que la llamada para notificar () o el método o el tiempo de espera notifyAll (), salida de espera;
- notificar: despertar un hilo esperando en el objeto;
- notifyAll: despertar todos los hilos esperando en el objeto;
El análisis detallado
sueño VS espera
del sueño () y wait () métodos están ejecutando actualmente hilo se suspende, los recursos de CPU venta.
método | Pertenece a la clase | método Tipo | bloqueo | Métodos Extracción | escena | uso |
---|---|---|---|---|---|---|
dormir | Hilo | método estático | No suelte cerraduras | tiempo de espera, de interrupción | ilimitado | Control dentro de la rosca |
Espere | Objeto | método no estático | Liberar el bloqueo | tiempo de espera, notificar, interrupción | bloque de instrucciones de sincronización | La comunicación entre hilos |
public static void sleep(long millis) throws InterruptedException public static void sleep(long millis, int nanos) throws InterruptedException public final void wait() throws InterruptedException public final void wait(long timeout) throws InterruptedException public final void wait(long timeout, int nanos) throws InterruptedException
espere && notificar
Llame a la espera del objeto (), el hilo notificar (), el método notify () debe ser utilizado como el propietario del monitor del este objeto. escenario común es que el bloque interno sincronizado de palabras clave usando estos tres métodos, si un wait (), notify (), notify () método directamente en el hilo, se lanzará una excepción IllegalMonitorStateException, arrojados a indicar que un hilo ha tratado de esperar en el monitor de un objeto o para notificar a otros objetos están a la espera para el monitor sin poseer el hilo monitor especificado. .
Método llamadas hilo wait (), el método de la rosca llamar a interrupción (), que tratará de obtener el bloqueo de objetos. Sólo cuando el objeto es conseguir una cerradura, comenzaron a emitir la excepción apropiada, el programa después de que se ejecute el hilo.
interrumpir
método de interrupción del trabajo () es simplemente para cambiar el estado de interrupción, no directamente de interrupción del hilo en funcionamiento. principio real se interrumpe cuando el hilo es Object.wait (), cuando el método para cambiar el estado de alarma, Thread.join () u obstrucción método sleep (), llamando interrupción () mientras que el interior de estos métodos esperar / join / sueño constantemente cheques enhebrar valor de estado de interrupción, encontraron cuando los cambios de interrupción valor de estado tiran InterruptedException anomalía; para el hilo no bloqueado, el método de interrupción de llamar () no tiene efecto.
rendimiento
método de rendimiento () para vender la hora actual ejecución CPU hilo, y cuando no libera los bloqueos mantenidos por el hilo actual. Después método yield () realizar, el estado del hilo se cambia de Ejecución estado ejecutable, ya que es estado ejecutable, también es probable que sea de inmediato volver a entrar en la planificación de la CPU estado Running