"Hi, Amigo!"

"And a couple more details. Let's call it practical advice."

"Ipagpalagay na mayroon kang isang pamamaraan na naghihintay para sa isang bagay at nakatulog hanggang sa ang isang kondisyon ay nasiyahan."

Kung walang laman ang koleksyon, maghihintay kami
public synchronized Runnable getJob()
{
 if (jobs.size() == 0)
  this.wait();

 return jobs.remove(0);
}

"Ang dokumentasyon ng Java ay mahigpit na nagrerekomenda na tawagan ang paraan ng paghihintay sa isang loop:"

Kung walang laman ang koleksyon, maghihintay kami
public synchronized Runnable getJob()
{
 while (jobs.size() == 0)
  this.wait();

 return jobs.remove(0);
}

"Why? The thing is that if the thread wakes up, that doesn't mean that the condition is satisfied. Siguro may dalawampu't ganoong sleeping threads. Lahat sila nagising, pero isa lang ang pwedeng kumuha ng task."

"Sa halos pagsasalita, maaaring magkaroon ng 'false alarm'. Dapat itong isaalang-alang ng isang mahusay na developer."

"I see. Hindi ba mas madaling gumamit na lang ng notify?"

"Buweno, paano kung mayroong higit sa isang gawain sa listahan? Karaniwang inirerekomendang gamitin ang Notify para sa kapakanan ng pag-optimize. Sa lahat ng iba pang sitwasyon, inirerekomendang gamitin ang paraan ng notifyAll."

"OK."

"Ngunit may higit pa. Una, maaaring may isang sitwasyon kung saan may nagmamana sa iyong klase, nagdadagdag ng kanilang sariling mga pamamaraan, at gumagamit din ng wait/notifyAll. Sa madaling salita, maaaring mayroong isang sitwasyon kung saan naghihintay ang independiyenteng paghihintay/pag-abisoLahat ng mga pares sa parehong bagay. and don't know about each other. So what should you do?"

"Palaging tumawag ng wait in a loop at tingnan kung totoo ang kondisyon ng pagwawakas ng loop!"

"Tama. At para maging malinaw na hindi mo ito matatakasan, itinuturo ng maraming developer na kung minsan ay nagigising ang mga thread nang mag-isa. Mga thread na garantisadong hindi nagising nang hindi sinasadya. Mukhang side effect ito ng pag-optimize ng code sa isang nagpapatakbo ng Java machine."

"Whoa. Got it. Kung walang loop, hindi maganda ang wait method."