2012-10-04 11 views
5

En los programas de subprocesos múltiples, sospecho que cuando un subproceso espera(), no ocupa mucha utilización de la CPU para que la CPU pueda intercambiar otros subprocesos.¿Qué hace un hilo después de llamar a wait() en Java?

Por ejemplo, 100 hilos comienzan la misma tarea juntos comparando con 50 hilos que realmente hacen la tarea, mientras que otros 50 hilos esperan hasta que se completen las 50 tareas. El último caso cuesta mucho menos tiempo que el primero.

¿Alguien puede sugerir algunas lecturas sobre esto?

+1

Err, se espera? para lo que está esperando ser notificado? – EJP

Respuesta

4

El método de espera tiene dos propósitos:

  1. Se le dirá el hilo se está ejecutando actualmente ir a dormir (no usar ninguna CPU).
  2. Liberará el bloqueo para que otros subprocesos se puedan activar y bloquear.

Cada vez que un método hace algo dentro de un bloque sincronizado, todo lo que hay en el bloque debe esperar a que se libere el objeto bloqueado.

synchronized (lockObject) { 
    // someone called notify() after taking the lock on 
    // lockObject or entered wait() so now it's my turn 

    while (whatineedisnotready) { 
     wait(); // release the lock so others can enter their check 
     // now, if there are others waiting to run, they 
     // will have a chance at doing so. 
    } 
} 

lectura obligada:

java synchronized

+0

Lo que quiero saber es qué y cómo la CPU hace un hilo de espera. Pero tu respuesta ayuda un poco. Todavía necesito algunas lecturas para probar cuando un hilo espera, no usa ninguna CPU :) –

+0

Tengo mucha curiosidad sobre esto, ¿alguna vez recibiste una respuesta? – wonton

Cuestiones relacionadas