2012-10-04 9 views
5

W programach wielowątkowych podejrzewam, że gdy wątek czeka(), nie angażuje zbyt wiele procesorów, aby procesor mógł zamienić się na inny wątek.Co robi wątek po wywołaniu wait() w Javie?

Na przykład 100 wątków rozpoczyna to samo zadanie, podczas gdy 50 wątków wykonuje to zadanie, podczas gdy pozostałe 50 wątków czeka aż wszystkie 50 zadań zostanie ukończonych. Ten ostatni przypadek kosztuje znacznie mniej czasu niż ten pierwszy.

Czy ktoś może sugerować jakieś odczyty na ten temat?

+1

Err, to czeka? na cokolwiek czeka na powiadomienie? – EJP

Odpowiedz

4

Sposób czekać ma dwa cele:

  1. powie to wątek aktualnie wykonywany iść spać (nie używać żadnych CPU).
  2. Spowoduje to zwolnienie blokady, aby inne wątki mogły się obudzić i zabrać zamek.

Ilekroć metoda robi coś wewnątrz zsynchronizowanego bloku, to, co jest w bloku, musi czekać na zwolnienie zablokowanego obiektu.

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. 
    } 
} 

Koniecznie przeczytaj:

java synchronized

+0

Co chcę wiedzieć, co i jak procesor robi do wątku oczekiwania. Ale twoja odpowiedź trochę pomaga. Nadal potrzebuję kilku odczytów, aby dowieść, kiedy wątek czeka, nie używa żadnego procesora :) –

+0

Jestem bardzo ciekawy, czy kiedykolwiek dostałeś odpowiedź? – wonton