"Hi, Amigo!"

"Ngayon sasabihin ko sa iyo ng kaunti ang tungkol sa sleep, yield, at join method."

"Ang boring. I just found an interview question: 'What's the difference between the yield (), sleep (), and wait () methods?'. Can you explain that?"

"Walang problema. Una, ito ay tatlong ganap na magkakaibang pamamaraan."

1) sleep(timeout)  – hihinto ang kasalukuyang thread (kung saan tinawag ang sleep) para sa bilang ng mga millisecond na ipinahiwatig ng parameter ng timeout. Ang thread ay mapupunta sa TIMED_WAITING na estado. Ang pamamaraan ay maaaring magtapos nang mas maaga kung ang isInterrupted na bandila ay nakatakda.

Halimbawa Paglalarawan
Thread.sleep(500);
Sinususpinde ng kasalukuyang thread ang sarili nitong pagpapatupad sa loob ng 500 millisecond, o 0.5 segundo.

2) yield()  – ang kasalukuyang thread ay 'lumalaktaw sa kanyang turn'. Ang thread ay napupunta mula sa tumatakbong estado patungo sa handa na estado, at ang JVM ay nagpapatuloy sa susunod na thread. Ang tumatakbo at handa na mga estado ay mga sub-estado ng RUNNABLE na estado.

Halimbawa Paglalarawan
Thread.yield();
"Lumalaktaw ang kasalukuyang thread" at agad na lumipat ang Java sa susunod na thread.

3) wait(timeout)  – ito ay isang bersyon ng wait () method, ngunit may timeout. "Ang paraan ng paghihintay ay matatawag lamang sa loob ng isang naka-synchronize na bloke sa isang mutex na bagay na naka-lock ng kasalukuyang thread. Kung hindi, ang paraan ay magtapon ng Illegal MonitorState Exception.

"Ang pagtawag sa paraang ito ay nagiging sanhi ng pag-release ng lock ng mutex object, na ginagawa itong available para sa isa pang thread na makuha. Bukod dito, ang thread ay pumapasok sa WAITING state (para sa wait() method na walang parameter) o sa TIMED_WAITING state (para sa wait(timeout) ) paraan)."

Halimbawa Paglalarawan
Object monitor = getMonitor();
synchronized(monitor)
{
 …
 monitor.wait(500);
 …
}
Kapag tinawag ang paraan ng paghihintay, ilalabas ng kasalukuyang thread ang lock ng object ng monitor, at matutulog ng 500 millisecond. Ang monitor object ay maaaring makuha ng isa pang thread.
Pagkatapos ng 500 milliseconds, magigising ang thread at kung hindi abala ang monitor, kukunin ito ng thread at magpapatuloy sa pagtatrabaho.
Kung ang monitor ay naka-lock ng isa pang thread, ang kasalukuyang thread ay lilipat sa BLOCKED na estado.

4) sumali (timeout)

"Ang pamamaraang ito ay wala sa iyong tanong, ngunit ito ay nasa aking lesson plan, kaya sasabihin ko sa iyo ang tungkol dito. Kapag tinawag mo ang join() o join(timeout) na paraan, ang kasalukuyang thread ay 'naka-attach' sa Thread na tinatawag na paraang ito. Natutulog ang kasalukuyang thread at naghihintay hanggang sa matapos ang thread na ito ay pinagsama-sama (ibig sabihin, ang thread na tinawag na join() method)."

"Ang kasalukuyang thread ay pumapasok sa WAITING state para sa join() method at sa TIMED_WAITING state para sa join(timeout) method."

Halimbawa Paglalarawan
Thread thread = getWorkThread();
thread.join(500);
Ang kasalukuyang thread ay sasali sa workerThread thread at hihintayin itong matapos.
Ngunit ito ay 'mag-aalis' pagkatapos ng 500 millisecond at magpapatuloy sa pagtakbo.

"Ang timeout sa wait(timeout) at join(timeout) method ay nangangahulugan na ang paraan ay matutulog at naghihintay ng isang bagay, ngunit hindi hihigit sa timeout na ibinigay sa milliseconds. Pagkatapos ay magigising ito."

"Mukhang ang tanging bagay na mayroon ang mga pamamaraan na ito ay ang pag-timeout. Sila ay gumagawa ng ganap na magkakaibang mga bagay."

"Oo, tama na."